Mercurial > jhg
comparison src/org/tmatesoft/hg/internal/InflaterDataAccess.java @ 575:8bf184c9d733
Issue 43: poor performance with InflaterDataAccess. Phase 1: test existing code, fix defects found
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Tue, 16 Apr 2013 16:59:59 +0200 |
| parents | 2a08466838d3 |
| children | 3c4db86e8c1f |
comparison
equal
deleted
inserted
replaced
| 574:88afffd39899 | 575:8bf184c9d733 |
|---|---|
| 82 } | 82 } |
| 83 decompressedLength = 0; // guard to avoid endless loop in case length() would get invoked from below. | 83 decompressedLength = 0; // guard to avoid endless loop in case length() would get invoked from below. |
| 84 int c = 0; | 84 int c = 0; |
| 85 int oldPos = decompressedPos; | 85 int oldPos = decompressedPos; |
| 86 byte[] dummy = new byte[buffer.length]; | 86 byte[] dummy = new byte[buffer.length]; |
| 87 int toRead; | 87 try { |
| 88 while ((toRead = super.available()) > 0) { | 88 int toRead = -1; |
| 89 if (toRead > buffer.length) { | 89 do { |
| 90 toRead = buffer.length; | |
| 91 } | |
| 92 super.readBytes(buffer, 0, toRead); | |
| 93 inflater.setInput(buffer, 0, toRead); | |
| 94 try { | |
| 95 while (!inflater.needsInput()) { | 90 while (!inflater.needsInput()) { |
| 96 c += inflater.inflate(dummy, 0, dummy.length); | 91 c += inflater.inflate(dummy, 0, dummy.length); |
| 97 } | 92 } |
| 98 } catch (DataFormatException ex) { | 93 if (inflater.needsInput() && (toRead = super.available()) > 0) { |
| 99 throw new IOException(ex.toString()); | 94 // fill: |
| 100 } | 95 if (toRead > buffer.length) { |
| 96 toRead = buffer.length; | |
| 97 } | |
| 98 super.readBytes(buffer, 0, toRead); | |
| 99 inflater.setInput(buffer, 0, toRead); | |
| 100 } | |
| 101 } while(toRead > 0); | |
| 102 } catch (DataFormatException ex) { | |
| 103 throw new IOException(ex.toString()); | |
| 101 } | 104 } |
| 102 decompressedLength = c + oldPos; | 105 decompressedLength = c + oldPos; |
| 103 reset(); | 106 reset(); |
| 104 seek(oldPos); | 107 seek(oldPos); |
| 105 return decompressedLength; | 108 return decompressedLength; |
