I'm wondering why you still can read bytes from already closed ByteArrayOutputStream
. Doesn't this line from docs mean the opposite?
public void close ()
: Closes this stream. This releases system resources used for this stream.
Sample code:
String data = "Some string ...";
ByteArrayOutputStream bOut = new ByteArrayOutputStream();
DataOutputStream dOut = new DataOutputStream(bOut);
dOut.write(data.getBytes());
dOut.close();
System.out.println("Length: " + bOut.toByteArray().length);
System.out.println("Byte #2: " + bOut.toByteArray()[2]);
Output:
Length: 15
Byte #2: 109
Am I doing something wrong?
ByteArrayOutputStream.toByteArray just copies what it has in the buffer; it's not reading anything more from the stream.
public synchronized byte[] toByteArray() {
return Arrays.copyOf(buf, count);
}
Also this class is a bit special. See Java documentation and code.
Closing a ByteArrayOutputStream has no effect. The methods in this class can be called after the stream has been closed without generating an IOException.
public void close() throws IOException {
}
close()
does not really do anything.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With