InflaterInputStream.java: New stub class.
8 * InflaterInputStream.java: New stub class. * ZipInputStream.java: New class. Partly works. * ZipConstants.java: Add two (internal) constants. * ZipEntry.java (timeFromDOS): New static (non-public) method. * ZipFile.java: Make it mostly work, except for compression. * ZipOutputStream.java: Start implementation. From-SVN: r26794
This commit is contained in:
parent
0e9c6b0bf0
commit
f7f65c793e
@ -33,6 +33,7 @@ public class ZipEntry
|
|||||||
String name;
|
String name;
|
||||||
long size = -1;
|
long size = -1;
|
||||||
long time = -1;
|
long time = -1;
|
||||||
|
long relativeOffset = -1;
|
||||||
|
|
||||||
ZipEntry next;
|
ZipEntry next;
|
||||||
|
|
||||||
@ -80,5 +81,36 @@ public class ZipEntry
|
|||||||
|
|
||||||
public void setTime (long time) { this.time = time; }
|
public void setTime (long time) { this.time = time; }
|
||||||
|
|
||||||
|
private final static short[] daysToMonthStart = {
|
||||||
|
//Jan Feb Mar Apr May Jun Jul
|
||||||
|
0, 31, 31+28, 2*31+28, 2*31+28+30, 3*31+28+30, 3*31+28+2*30,
|
||||||
|
// Aug Sep Oct Nov Dec
|
||||||
|
4*31+28+2*30, 5*31+28+2*30, 5*31+28+3*30, 6*31+28+3*30, 6*31+28+4*30};
|
||||||
|
|
||||||
|
/** Convert a DOS-style type value to milliseconds since 1970. */
|
||||||
|
static long timeFromDOS (int date, int time)
|
||||||
|
{
|
||||||
|
int sec = 2 * (time & 0x1f);
|
||||||
|
int min = (time >> 5) & 0x3f;
|
||||||
|
int hrs = (time >> 11) & 0x1f;
|
||||||
|
int day = date & 0x1f;
|
||||||
|
int mon = ((date >> 5) & 0xf) - 1;
|
||||||
|
int year = ((date >> 9) & 0x7f) + 10; /* Since 1970. */
|
||||||
|
|
||||||
|
// Guard against invalid or missing date causing IndexOutOfBoundsException.
|
||||||
|
if (mon < 0 || mon > 11)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
long mtime = (((hrs * 60) + min) * 60 + sec) * 1000;
|
||||||
|
|
||||||
|
// Leap year calculations are rather trivial in this case ...
|
||||||
|
int days = 365 * year + ((year+1)>>2);
|
||||||
|
days += daysToMonthStart[mon];
|
||||||
|
if ((year & 3) == 0 && mon > 1)
|
||||||
|
days++;
|
||||||
|
days += day;
|
||||||
|
return (days * 24*60*60L + ((hrs * 60) + min) * 60 + sec) * 1000L;
|
||||||
|
}
|
||||||
|
|
||||||
public String toString () { return name; }
|
public String toString () { return name; }
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user