首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

Java的InputStream和Reader的有关问题,悬赏50分

2012-01-09 
Java的InputStream和Reader的问题,高手进,悬赏50分!要写一个HTTP的Client程序,要求使用Socket。HTTP的Respo

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?他的迭代还浪费了点性能咧,呵呵

热点排行