@Override public synchronized int read() throws IOException { if(getRemainingCharacters()==0) { if(outOfBoundException==null) return -1; throw outOfBoundException; } int i = in.read(); totalRead++; return i; }
/** * Performs some tests that are common to {@link #testBoundedReaderWithException()} and * {@link #testBoundedReaderWithoutException()}. * * @param br the BoundedReader to prepare * @throws IOException should not happen */ private void prepareBoundedReader(BoundedReader br) throws IOException { assert 0 == br.getReadCounter(); assert 4 == br.getRemainingCharacters(); assert 4 == br.getAllowedCharacters(); assert br.read()!=-1; assert 1 == br.getReadCounter(); assert 3 == br.getRemainingCharacters(); assert 4 == br.getAllowedCharacters(); assert br.read(new char[1])!=-1; assert 2 == br.getReadCounter(); assert 2 == br.getRemainingCharacters(); assert 4 == br.getAllowedCharacters(); assert br.read(new char[1], 0, 1)!=-1; assert 3 == br.getReadCounter(); assert 1 == br.getRemainingCharacters(); assert 4 == br.getAllowedCharacters(); assert br.skip(1)!=-1; assert 4 == br.getReadCounter(); assert 0 == br.getRemainingCharacters(); assert 4 == br.getAllowedCharacters(); }
BoundedReader br = new BoundedReader(new CharArrayReader(TEST_CHARACTERS), -1); assert 0 == br.getReadCounter(); assert Long.MAX_VALUE == br.getRemainingCharacters(); assert -1 == br.getAllowedCharacters(); assert br.read()!=-1; assert 1 == br.getReadCounter(); assert Long.MAX_VALUE == br.getRemainingCharacters(); assert -1 == br.getAllowedCharacters(); assert br.read(new char[1])!=-1; assert 2 == br.getReadCounter(); assert Long.MAX_VALUE == br.getRemainingCharacters(); assert -1 == br.getAllowedCharacters(); assert br.read(new char[1], 0, 1)!=-1; assert 3 == br.getReadCounter(); assert Long.MAX_VALUE == br.getRemainingCharacters(); assert -1 == br.getAllowedCharacters(); while(br.read()!=-1) totalRead ++;
/** * Tests a <code>BoundedReader</code> operating in bounded mode. * * @throws IOException should not happen */ @Test public void testBoundedReaderWithoutException() throws IOException { BoundedReader br = new BoundedReader(new CharArrayReader(TEST_CHARACTERS), 4); prepareBoundedReader(br); assert -1 == br.read(); assert -1 == br.read(new char[1]); assert -1 == br.read(new char[1], 0, 1); assert -1 == br.skip(1); assert 4 == br.getReadCounter(); assert 0 == br.getRemainingCharacters(); assert 4 == br.getAllowedCharacters(); // Attempt to read a chunk larger than the remaining characters and assert that it does not return -1 br = new BoundedReader(new CharArrayReader(TEST_CHARACTERS), 4); assert br.read(new char[6])!=-1; }
@Override public synchronized int read(char[] cbuf, int off, int len) throws IOException { int canRead = (int)Math.min(getRemainingCharacters(), len); if(canRead==0) { if(outOfBoundException==null) return -1; throw outOfBoundException; } int nbRead = in.read(cbuf, off, canRead); if(nbRead>0) totalRead += nbRead; return nbRead; }
BoundedReader br = new BoundedReader(new CharArrayReader(TEST_CHARACTERS), 4, new StreamOutOfBoundException(4)); prepareBoundedReader(br); try { br.read(); } catch(StreamOutOfBoundException e) { exceptionThrown = true; } try { br.read(new char[1]); } catch(StreamOutOfBoundException e) { exceptionThrown = true; } try { br.read(new char[1], 0, 1); } catch(StreamOutOfBoundException e) { exceptionThrown = true; } try { br.skip(1); } catch(StreamOutOfBoundException e) { exceptionThrown = true; } assert 4 == br.getReadCounter(); assert 0 == br.getRemainingCharacters(); assert 4 == br.getAllowedCharacters(); br = new BoundedReader(new CharArrayReader(TEST_CHARACTERS), 4); assert br.read(new char[6])!=-1;
@Override public synchronized long skip(long n) throws IOException { int canSkip = (int)Math.min(getRemainingCharacters(), n); if(canSkip==0) { if(outOfBoundException==null) return -1; throw outOfBoundException; } long nbSkipped = in.skip(canSkip); if(nbSkipped>0) totalRead += nbSkipped; return nbSkipped; }