equal
deleted
inserted
replaced
23 * questions. |
23 * questions. |
24 */ |
24 */ |
25 |
25 |
26 package java.util.zip; |
26 package java.util.zip; |
27 |
27 |
28 import java.nio.Buffer; |
|
29 import java.nio.ByteBuffer; |
28 import java.nio.ByteBuffer; |
30 import java.nio.file.attribute.FileTime; |
29 import java.nio.file.attribute.FileTime; |
31 import java.security.AccessController; |
30 import java.security.AccessController; |
32 import java.security.PrivilegedAction; |
31 import java.security.PrivilegedAction; |
33 import java.time.DateTimeException; |
32 import java.time.DateTimeException; |
38 import java.util.concurrent.TimeUnit; |
37 import java.util.concurrent.TimeUnit; |
39 |
38 |
40 import static java.util.zip.ZipConstants.ENDHDR; |
39 import static java.util.zip.ZipConstants.ENDHDR; |
41 |
40 |
42 import jdk.internal.misc.Unsafe; |
41 import jdk.internal.misc.Unsafe; |
43 import sun.nio.ch.DirectBuffer; |
|
44 |
42 |
45 class ZipUtils { |
43 class ZipUtils { |
46 |
44 |
47 // used to adjust values between Windows and java epoch |
45 // used to adjust values between Windows and java epoch |
48 private static final long WINDOWS_EPOCH_IN_MICROSECONDS = -11644473600000000L; |
46 private static final long WINDOWS_EPOCH_IN_MICROSECONDS = -11644473600000000L; |
293 |
291 |
294 private static final long byteBufferArrayOffset = unsafe.objectFieldOffset(ByteBuffer.class, "hb"); |
292 private static final long byteBufferArrayOffset = unsafe.objectFieldOffset(ByteBuffer.class, "hb"); |
295 private static final long byteBufferOffsetOffset = unsafe.objectFieldOffset(ByteBuffer.class, "offset"); |
293 private static final long byteBufferOffsetOffset = unsafe.objectFieldOffset(ByteBuffer.class, "offset"); |
296 |
294 |
297 static byte[] getBufferArray(ByteBuffer byteBuffer) { |
295 static byte[] getBufferArray(ByteBuffer byteBuffer) { |
298 return (byte[]) unsafe.getObject(byteBuffer, byteBufferArrayOffset); |
296 return (byte[]) unsafe.getReference(byteBuffer, byteBufferArrayOffset); |
299 } |
297 } |
300 |
298 |
301 static int getBufferOffset(ByteBuffer byteBuffer) { |
299 static int getBufferOffset(ByteBuffer byteBuffer) { |
302 return unsafe.getInt(byteBuffer, byteBufferOffsetOffset); |
300 return unsafe.getInt(byteBuffer, byteBufferOffsetOffset); |
303 } |
301 } |