public static Header read(ExtDataInput in, CountingInputStream countIn) throws IOException { short type; int start = countIn.getCount(); try { type = in.readShort(); } catch (EOFException ex) { return new Header(TYPE_NONE, 0, 0, countIn.getCount()); } return new Header(type, in.readShort(), in.readInt(), start); }
while ((len = cin.read(buf)) >= 0) { out.write(buf,0,len); job.status = job.new Installing(total == -1 ? -1 : cin.getCount() * 100 / total);
private void readTableTypeSpec() throws AndrolibException, IOException { mTypeSpec = readSingleTableTypeSpec(); addTypeSpec(mTypeSpec); int type = nextChunk().type; ResTypeSpec resTypeSpec; while (type == Header.TYPE_SPEC_TYPE) { resTypeSpec = readSingleTableTypeSpec(); addTypeSpec(resTypeSpec); type = nextChunk().type; // We've detected sparse resources, lets record this so we can rebuild in that same format (sparse/not) // with aapt2. aapt1 will ignore this. if (! mResTable.getSparseResources()) { mResTable.setSparseResources(true); } } while (type == Header.TYPE_TYPE) { readTableType(); // skip "TYPE 8 chunks" and/or padding data at the end of this chunk if (mCountIn.getCount() < mHeader.endPosition) { LOGGER.warning("Unknown data detected. Skipping: " + (mHeader.endPosition - mCountIn.getCount()) + " byte(s)"); mCountIn.skip(mHeader.endPosition - mCountIn.getCount()); } type = nextChunk().type; addMissingResSpecs(); } }
private ResTypeSpec readSingleTableTypeSpec() throws AndrolibException, IOException { checkChunkType(Header.TYPE_SPEC_TYPE); int id = mIn.readUnsignedByte(); mIn.skipBytes(3); int entryCount = mIn.readInt(); if (mFlagsOffsets != null) { mFlagsOffsets.add(new FlagsOffset(mCountIn.getCount(), entryCount)); } /* flags */mIn.skipBytes(entryCount * 4); mTypeSpec = new ResTypeSpec(mTypeNames.getString(id - 1), mResTable, mPkg, id, entryCount); mPkg.addType(mTypeSpec); return mTypeSpec; }
@Test public void testSkipping() throws IOException { final String text = "Hello World!"; final byte[] bytes = text.getBytes(); final ByteArrayInputStream bais = new ByteArrayInputStream(bytes); final CountingInputStream cis = new CountingInputStream(bais); assertEquals(6,cis.skip(6)); assertEquals(6,cis.getCount()); final byte[] result = new byte[6]; cis.read(result); assertEquals("World!",new String(result)); assertEquals(12,cis.getCount()); cis.close(); }
@Test public void testCounting() throws Exception { final String text = "A piece of text"; final byte[] bytes = text.getBytes(); final ByteArrayInputStream bais = new ByteArrayInputStream(bytes); final CountingInputStream cis = new CountingInputStream(bais); // have to declare this larger as we're going to read // off the end of the stream and input stream seems // to do bounds checking final byte[] result = new byte[21]; final byte[] ba = new byte[5]; int found = cis.read(ba); System.arraycopy(ba, 0, result, 0, 5); assertEquals( found, cis.getCount() ); final int value = cis.read(); found++; result[5] = (byte)value; assertEquals( found, cis.getCount() ); found += cis.read(result, 6, 5); assertEquals( found, cis.getCount() ); found += cis.read(result, 11, 10); // off the end assertEquals( found, cis.getCount() ); // trim to get rid of the 6 empty values final String textResult = new String(result).trim(); assertEquals(textResult, text); cis.close(); }
@Test public void testEOF1() throws Exception { final ByteArrayInputStream bais = new ByteArrayInputStream(new byte[2]); final CountingInputStream cis = new CountingInputStream(bais); int found = cis.read(); assertEquals(0, found); assertEquals(1, cis.getCount()); found = cis.read(); assertEquals(0, found); assertEquals(2, cis.getCount()); found = cis.read(); assertEquals(-1, found); assertEquals(2, cis.getCount()); cis.close(); }
@Test public void testZeroLength2() throws Exception { final ByteArrayInputStream bais = new ByteArrayInputStream(new byte[0]); final CountingInputStream cis = new CountingInputStream(bais); final byte[] result = new byte[10]; final int found = cis.read(result); assertEquals(-1, found); assertEquals(0, cis.getCount()); cis.close(); }
@Test public void testZeroLength3() throws Exception { final ByteArrayInputStream bais = new ByteArrayInputStream(new byte[0]); final CountingInputStream cis = new CountingInputStream(bais); final byte[] result = new byte[10]; final int found = cis.read(result, 0, 5); assertEquals(-1, found); assertEquals(0, cis.getCount()); cis.close(); }
@Test public void testZeroLength1() throws Exception { final ByteArrayInputStream bais = new ByteArrayInputStream(new byte[0]); final CountingInputStream cis = new CountingInputStream(bais); final int found = cis.read(); assertEquals(-1, found); assertEquals(0, cis.getCount()); cis.close(); }
@Test public void testEOF2() throws Exception { final ByteArrayInputStream bais = new ByteArrayInputStream(new byte[2]); final CountingInputStream cis = new CountingInputStream(bais); final byte[] result = new byte[10]; final int found = cis.read(result); assertEquals(2, found); assertEquals(2, cis.getCount()); cis.close(); }
@Test public void testEOF3() throws Exception { final ByteArrayInputStream bais = new ByteArrayInputStream(new byte[2]); final CountingInputStream cis = new CountingInputStream(bais); final byte[] result = new byte[10]; final int found = cis.read(result, 0, 5); assertEquals(2, found); assertEquals(2, cis.getCount()); cis.close(); }
@Test public void testResetting() throws Exception { final String text = "A piece of text"; final byte[] bytes = text.getBytes(); final ByteArrayInputStream bais = new ByteArrayInputStream(bytes); final CountingInputStream cis = new CountingInputStream(bais); final byte[] result = new byte[bytes.length]; int found = cis.read(result, 0, 5); assertEquals( found, cis.getCount() ); final int count = cis.resetCount(); found = cis.read(result, 6, 5); assertEquals( found, count ); cis.close(); }
@Test public void testLargeFiles_IO84() throws Exception { final long size = (long)Integer.MAX_VALUE + (long)1; final NullInputStream mock = new NullInputStream(size); final CountingInputStream cis = new CountingInputStream(mock); final OutputStream out = new NullOutputStream(); // Test integer methods IOUtils.copyLarge(cis, out); try { cis.getCount(); fail("Expected getCount() to throw an ArithmeticException"); } catch (final ArithmeticException ae) { // expected result } try { cis.resetCount(); fail("Expected resetCount() to throw an ArithmeticException"); } catch (final ArithmeticException ae) { // expected result } mock.close(); // Test long methods IOUtils.copyLarge(cis, out); assertEquals("getByteCount()", size, cis.getByteCount()); assertEquals("resetByteCount()", size, cis.resetByteCount()); }
@Override public float getProgress() throws IOException { return ((float) (fsin.getCount() - start)) / ((float) (end - start)); }
@Override public long getPos() throws IOException { return fsin.getCount(); }
@Override public long getPos() throws IOException { return fsin.getCount(); }
@Override public float getProgress() throws IOException { return ((float) (fsin.getCount() - start)) / ((float) (end - start)); }
void streamChunks(List<ChunkInfo> chunkInfos, CountingInputStream inputStream, ChunkStore store) { logger.debug("-- streamChunks() - chunk count: {}", chunkInfos.size()); chunkInfos.stream() .peek(ci -> logger.debug("-- streamChunks() - chunk info: {}", ci)) .filter(u -> isChunkMissing(u, store)) .forEach(u -> streamChunk(inputStream, inputStream.getCount(), u, store)); }