当前位置: 技术问答>java相关
关于inputstream的问题来者有分!!
来源: 互联网 发布时间:2015-02-03
本文导语: 1,如何读取inputstream的内容? 2,读取到的东西不能有乱码 int read(byte[] b) 方法可能中断分开中文字符 3,byte b = new byte[streamlength]; inputs.read(b); temp=new String(b); System.out.print(temp); 按长度读取...
1,如何读取inputstream的内容?
2,读取到的东西不能有乱码
int read(byte[] b) 方法可能中断分开中文字符
3,byte b = new byte[streamlength];
inputs.read(b);
temp=new String(b);
System.out.print(temp);
按长度读取出现一大串不可见字符,整个inputstream不完整
2,读取到的东西不能有乱码
int read(byte[] b) 方法可能中断分开中文字符
3,byte b = new byte[streamlength];
inputs.read(b);
temp=new String(b);
System.out.print(temp);
按长度读取出现一大串不可见字符,整个inputstream不完整
|
1、解决你乱码的问题
首先你必须知道你读的文件是什么字符集的文件
然后可以:temp = new String(b,"你文件的字符集,如:GB2312")
2、解决没有读全的问题
在你的代码byte b = new byte[streamlength];中,你怎么知道streamlength的?
下面是JDK1.3.1对于inputstream返回值的说明:
Returns:
the total number of bytes read into the buffer, or -1 is there is no more data because the end of the stream has been reached.
很显然,你要监测read(byte[] b) 函数的返回值,只有返回-1才表示已经读完了。
====看了还有很多人对流的概念不了解====
首先你必须知道你读的文件是什么字符集的文件
然后可以:temp = new String(b,"你文件的字符集,如:GB2312")
2、解决没有读全的问题
在你的代码byte b = new byte[streamlength];中,你怎么知道streamlength的?
下面是JDK1.3.1对于inputstream返回值的说明:
Returns:
the total number of bytes read into the buffer, or -1 is there is no more data because the end of the stream has been reached.
很显然,你要监测read(byte[] b) 函数的返回值,只有返回-1才表示已经读完了。
====看了还有很多人对流的概念不了解====
|
BufferedInputStream(InputStream in)
|
java里char是16位,当然就有问题了。
直接用write(byte[])不就行了吗?:)
java里stream的操作那么多,多看api就明白了(尽管我现在还是不明白:)
直接用write(byte[])不就行了吗?:)
java里stream的操作那么多,多看api就明白了(尽管我现在还是不明白:)
|
换另一种方法试一试,采用java.net包里的Objectinputstream试试
他是把对象放在输入流里,
在另一端,用对象把他解开即可.
他是把对象放在输入流里,
在另一端,用对象把他解开即可.
|
1
|
2
|
你用一个filter吧。例如bufferedreader
|
InputStream is = sock.getInputStream();
DataInputStream dis = new DataInputStream(is);
DataInputStream dis = new DataInputStream(is);
|
关注
|
robber is right!
|
对于流,如果使用byte的方式读取,那无论什么样的文件都可以正确读出。包括二进制的图片文件。