我正在尝试连接到服务器,然后向其发送HTTP请求(在这种情况下为GET).这个想法是请求一个文件,然后从服务器接收它.
它应同时适用于文本文件和二进制文件(例如imgs).我对文本文件没有任何问题,它可以完美工作,但是对二进制文件有一些麻烦.
首先,我声明一个BufferedReader(用于读取标题和文本文件)和一个DataInput流:
BufferedReader in_text = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
DataInputStream in_binary = new DataInputStream(
new BufferedInputStream(socket.getInputStream()));
然后,我用in_text读取标题,并发现它是文本文件还是二进制文件.如果是文本文件,我可以在StringBuilder中正确读取.如果是二进制文件,我声明一个byte [filesize]并存储in_binary的以下内容.
byte[] bindata = new byte[filesize];
in_binary.readFully(bindata);
而且它不起作用.我收到一个EOFException.
我以为in_binary可能仍在流的第一个位置,因此它尚未读取标头.因此,我捕获了标头的长度,并跳过了in_binary中的字节.
byte[] bindata = new byte[filesize];
in_binary.reset();
in_binary.skip(headersize);
in_binary.readFully(bindata);
而且还是一样.
可能会发生什么?
谢谢!
PD:我知道我可以使用URLConnection等.那不是问题.