Java的InputStream和Reader的问题,高手进,悬赏50分!
要写一个HTTP的Client程序,要求使用Socket。HTTP的Response从Socket中的InputStream中得到。问题在于:
InputStream的前面部分内容使用的是Unicode编码(Response中的Status Line和Header),后面的Entity内容可能是任何编码(比如二进制的图片文件或者mp3等,也可能是HTML的文本)。前后之间用一个“\r\n”空行隔开。
我本来是使用InoutStreamReader来读这个InputStream的,读到“\r\n”空行之后再直接读这个inputStream的二进制内容。可是发现InoutStreamReader已经自动地读到用来分开两部分的“\r\n”空行之后去了,也就是说它实际上迭代调用基础InputStream的read方法更多次,而不是只读到它返回给用户的那个字符那里。所以我当我再调用InputStream的read方法是得到的字节已经不是空行之后的第一个字节了。因此我的Client程序得到的Entity内容就不全了。
请问应该怎么解决这个问题!
------解决方案--------------------帮顶!
------解决方案--------------------学习下,帮顶。。
------解决方案--------------------关注
------解决方案--------------------我也不会,帮顶一下,等待高手~~~
------解决方案--------------------不会啊
------解决方案--------------------wait for expert。。。。。。。。。。。。
------解决方案--------------------还是使用InputStream来读啊,自己来判断\r\n不就可以了
------解决方案--------------------private boolean skipLF;
private InputStream reader;
//....你的类的其他处理部分
//读取函数
private int read() throws
IOException {
int b = reader.read();
if (skipLF) {
if (b == '\n') {
b = reader.read();
}
skipLF = false;
}
switch (b) {
case '\r':
skipLF = true;
case '\n': /* Fall through */
nextLine(); //下一行,当然你也可以用自己的行计数器
return '\n';
}
return b;
}
以上的代码,直接使用InputStream就可以了,何必要用其他的reader?他的迭代还浪费了点性能咧,呵呵