@@ -33,100 +33,57 @@ private static void writeIntLE(OutputStream os, int value) throws IOException {
33
33
public void write (ZipArchive archive , OutputStream os ) throws IOException {
34
34
// Write local file headers.
35
35
for (final LocalFileHeader fileHeader : archive .getLocalFiles ()) {
36
- // Header
37
36
writeIntLE (os , ZipPatterns .LOCAL_FILE_HEADER_QUAD );
38
- // Minimum version
39
37
writeShortLE (os , fileHeader .getVersionNeededToExtract ());
40
- // General purpose bit flag
41
38
writeShortLE (os , fileHeader .getGeneralPurposeBitFlag ());
42
- // Compression method
43
39
writeShortLE (os , fileHeader .getCompressionMethod ());
44
- // Last modification time
45
40
writeShortLE (os , fileHeader .getLastModFileTime ());
46
- // Last modification date
47
41
writeShortLE (os , fileHeader .getLastModFileDate ());
48
- // CRC32
49
42
writeIntLE (os , fileHeader .getCrc32 ());
50
- // Compressed size
51
43
writeIntLE (os , (int ) fileHeader .getCompressedSize ());
52
- // Uncompressed size
53
44
writeIntLE (os , (int ) fileHeader .getUncompressedSize ());
54
- // File name length
55
45
writeShortLE (os , fileHeader .getFileNameLength ());
56
- // Extra field length
57
46
writeShortLE (os , fileHeader .getExtraFieldLength ());
58
- // File name
59
47
os .write (ByteDataUtil .toByteArray (fileHeader .getFileName ()));
60
- // Extra field
61
48
os .write (ByteDataUtil .toByteArray (fileHeader .getExtraField ()));
62
- // Compressed data
63
49
os .write (ByteDataUtil .toByteArray (fileHeader .getFileData ()));
64
50
}
65
51
66
52
// Write central directory file headers.
67
53
for (final CentralDirectoryFileHeader directory : archive .getCentralDirectories ()) {
68
- // Header
69
54
writeIntLE (os , ZipPatterns .CENTRAL_DIRECTORY_FILE_HEADER_QUAD );
70
- // Made by
71
55
writeShortLE (os , directory .getVersionMadeBy ());
72
- // Minimum version
73
56
writeShortLE (os , directory .getVersionNeededToExtract ());
74
- // General purpose bit flag
75
57
writeShortLE (os , directory .getGeneralPurposeBitFlag ());
76
- // Compression method
77
58
writeShortLE (os , directory .getCompressionMethod ());
78
- // Last modification time
79
59
writeShortLE (os , directory .getLastModFileTime ());
80
- // Last modification date
81
60
writeShortLE (os , directory .getLastModFileDate ());
82
- // CRC32
83
61
writeIntLE (os , directory .getCrc32 ());
84
- // Compressed size
85
62
writeIntLE (os , (int ) directory .getCompressedSize ());
86
- // Uncompressed size
87
63
writeIntLE (os , (int ) directory .getUncompressedSize ());
88
- // File name length
89
64
writeShortLE (os , directory .getFileNameLength ());
90
- // Extra field length
91
65
writeShortLE (os , directory .getExtraFieldLength ());
92
- // File comment length
93
66
writeShortLE (os , directory .getFileCommentLength ());
94
- // Disk number where file starts
95
67
writeShortLE (os , directory .getDiskNumberStart ());
96
- // Internal file attributes
97
68
writeShortLE (os , directory .getInternalFileAttributes ());
98
- // External file attributes
99
69
writeIntLE (os , directory .getExternalFileAttributes ());
100
- // Relative offset of local file header
101
70
writeIntLE (os , (int ) directory .getRelativeOffsetOfLocalHeader ());
102
- // File name
103
71
os .write (ByteDataUtil .toByteArray (directory .getFileName ()));
104
- // Extra field
105
72
os .write (ByteDataUtil .toByteArray (directory .getExtraField ()));
106
- // File comment
107
73
os .write (ByteDataUtil .toByteArray (directory .getFileComment ()));
108
74
}
109
75
110
76
// Write end of central directory record.
111
77
final EndOfCentralDirectory end = archive .getEnd ();
112
78
if (end != null ) {
113
- // Header
114
79
writeIntLE (os , ZipPatterns .END_OF_CENTRAL_DIRECTORY_QUAD );
115
- // Disk number
116
80
writeShortLE (os , end .getDiskNumber ());
117
- // Central directory start disk
118
81
writeShortLE (os , end .getCentralDirectoryStartDisk ());
119
- // TODO What is this?
120
82
writeShortLE (os , end .getCentralDirectoryStartOffset ());
121
- // Central directory entries
122
83
writeShortLE (os , end .getNumEntries ());
123
- // Central directory size
124
84
writeIntLE (os , (int ) end .getCentralDirectorySize ());
125
- // Central directory offset
126
85
writeIntLE (os , (int ) end .getCentralDirectoryOffset ());
127
- // Comment length
128
86
writeShortLE (os , end .getZipCommentLength ());
129
- // Comment
130
87
os .write (ByteDataUtil .toByteArray (end .getZipComment ()));
131
88
}
132
89
}
0 commit comments