Hi Paul,
Thanks for the suggestion. Webrev has been updated accordingly.
http://cr.openjdk.java.net/~sherman/8170831
Sherman
On 12/7/16, 10:19 AM, Paul Sandoz wrote:
Hi,
334 if (lastEntryName != null&& lastEntryName == entry.name) {
Can you just do:
if (Objects.equals(lastEntryName, entry.name)) { // [*]
? the assumptions being entry.name is never null, which i believe is valid, and
one can check the string contents if refs are not equal.
Paul.
[*]
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null&& a.equals(b));
}
On 6 Dec 2016, at 16:14, Xueming Shen<xueming.s...@oracle.com> wrote:
Hi,
Please help review.commit the proposed change for JDK8170831
issue: https://bugs.openjdk.java.net/browse/JDK-8170831
webrev: http://cr.openjdk.java.net/~sherman/8170831/
(1) As explained in the issue description, the new implementation now does not
have the cache
mechanism as the old C implementation does (the C implementation still is still
in repo, take a
look at "jdk/src/java.base/share/native/libzip/zip_util.c#Zip_GetEntry2(...)".
the corresponding cache is stored in zip->cache, "zip_util.h#trypedef struct
jzfile/cache".
(2) instead of having this cache in class ZipFile.Source, the cached pair is
now at ZipFile
level for simplicity.
(3) I now simply compare the identity of the entry "name", to avoid the
unnecessary string
comparing operation, with the assumption that it's rare that someone will
replace the entry
name filed of the returned ZipEntry with a new String object with the same
value and come
back for the InputStream.
(4) given currently there is no easy way to generate a zip/jar file with same
entry name
in test case (out ZipInputStream does not such use scenario, with an
exception), I'm not adding
new test case as the regression test, but I do have verified the change with
the jar files that have
entries with same name but different bytes.
opinion?
Thanks,
Xueming