A
AndrewTK
I am trying to read binary data from a network input stream but am
having a hard time at it. Consider the following:
public static void main(String[] args) throws Exception {
ServerSocket serversock = new ServerSocket(1234);
while(true) {
try {
Socket s = serversock.accept();
test(s.getInputStream(), s.getOutputStream() );
} catch(Exception e) {
e.printStackTrace();
}
}
}
public static void test(InputStream in, OutputStream out) throws
IOException {
byte[] trash = new byte[10];
int rcount;
while( (rcount = in.read(trash)) != -1) {
for(byte b : trash) {
if(b ==-1) {System.out.print(".");}
}
}
}
So far straightforward. It reads from the input stream and discards the
bytes. It also prints a full stop each time it encounters a byte
/inside the buffer/ that comes through as -1.
In theory, this should never happen: if a byte is -1, it comes out of
the read() method as such, which is normally a flag for read(byte[],
int, int) to stop reading.
However, the above code does print out a full set of dots when I run
the program - I have a form which connects to this server program and
sends a ZIP file to it. Try:
<html><body>
<form action="http://127.0.0.1:1234/" method="POST"
enctype="multipart/form-data">
<input type="file" name="zfile" />
<input type="submit value="send" />
</form></html></body>
When I try to read the ZIP data, expecting -1 at the end of the stream,
reading gets -1 bang in the middle of the data. I am aware that EOS
would occur long after the file data ended, but that's not the point -
I can't even reach the end of the file data.
Any suggestions?
Andrew
having a hard time at it. Consider the following:
public static void main(String[] args) throws Exception {
ServerSocket serversock = new ServerSocket(1234);
while(true) {
try {
Socket s = serversock.accept();
test(s.getInputStream(), s.getOutputStream() );
} catch(Exception e) {
e.printStackTrace();
}
}
}
public static void test(InputStream in, OutputStream out) throws
IOException {
byte[] trash = new byte[10];
int rcount;
while( (rcount = in.read(trash)) != -1) {
for(byte b : trash) {
if(b ==-1) {System.out.print(".");}
}
}
}
So far straightforward. It reads from the input stream and discards the
bytes. It also prints a full stop each time it encounters a byte
/inside the buffer/ that comes through as -1.
In theory, this should never happen: if a byte is -1, it comes out of
the read() method as such, which is normally a flag for read(byte[],
int, int) to stop reading.
However, the above code does print out a full set of dots when I run
the program - I have a form which connects to this server program and
sends a ZIP file to it. Try:
<html><body>
<form action="http://127.0.0.1:1234/" method="POST"
enctype="multipart/form-data">
<input type="file" name="zfile" />
<input type="submit value="send" />
</form></html></body>
When I try to read the ZIP data, expecting -1 at the end of the stream,
reading gets -1 bang in the middle of the data. I am aware that EOS
would occur long after the file data ended, but that's not the point -
I can't even reach the end of the file data.
Any suggestions?
Andrew