You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by bo...@apache.org on 2013/10/21 17:19:56 UTC
svn commit: r1534210 -
/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFile.java
Author: bodewig
Date: Mon Oct 21 15:19:55 2013
New Revision: 1534210
URL: http://svn.apache.org/r1534210
Log:
emptyFiles and antiItems bitsets only iterate over entries without streams
Modified:
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFile.java
Modified: commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFile.java
URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFile.java?rev=1534210&r1=1534209&r2=1534210&view=diff
==============================================================================
--- commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFile.java (original)
+++ commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFile.java Mon Oct 21 15:19:55 2013
@@ -394,21 +394,20 @@ public class SevenZOutputFile {
private void writeFileEmptyFiles(final DataOutput header) throws IOException {
boolean hasEmptyFiles = false;
- for (final SevenZArchiveEntry entry : files) {
- if (!entry.hasStream() && !entry.isDirectory()) {
- hasEmptyFiles = true;
- break;
+ int emptyStreamCounter = 0;
+ final BitSet emptyFiles = new BitSet(0);
+ for (int i = 0; i < files.size(); i++) {
+ if (!files.get(i).hasStream()) {
+ boolean isDir = files.get(i).isDirectory();
+ emptyFiles.set(emptyStreamCounter++, !isDir);
+ hasEmptyFiles |= !isDir;
}
}
if (hasEmptyFiles) {
header.write(NID.kEmptyFile);
- final BitSet emptyFiles = new BitSet(files.size());
- for (int i = 0; i < files.size(); i++) {
- emptyFiles.set(i, !files.get(i).hasStream() && !files.get(i).isDirectory());
- }
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
final DataOutputStream out = new DataOutputStream(baos);
- writeBits(out, emptyFiles, files.size());
+ writeBits(out, emptyFiles, emptyStreamCounter);
out.flush();
final byte[] contents = baos.toByteArray();
writeUint64(header, contents.length);
@@ -418,21 +417,20 @@ public class SevenZOutputFile {
private void writeFileAntiItems(final DataOutput header) throws IOException {
boolean hasAntiItems = false;
- for (final SevenZArchiveEntry entry : files) {
- if (entry.isAntiItem()) {
- hasAntiItems = true;
- break;
+ final BitSet antiItems = new BitSet(0);
+ int antiItemCounter = 0;
+ for (int i = 0; i < files.size(); i++) {
+ if (!files.get(i).hasStream()) {
+ boolean isAnti = files.get(i).isAntiItem();
+ antiItems.set(antiItemCounter++, isAnti);
+ hasAntiItems |= isAnti;
}
}
if (hasAntiItems) {
header.write(NID.kAnti);
- final BitSet antiItems = new BitSet(files.size());
- for (int i = 0; i < files.size(); i++) {
- antiItems.set(i, files.get(i).isAntiItem());
- }
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
final DataOutputStream out = new DataOutputStream(baos);
- writeBits(out, antiItems, files.size());
+ writeBits(out, antiItems, antiItemCounter);
out.flush();
final byte[] contents = baos.toByteArray();
writeUint64(header, contents.length);