再论InputStream 和 InputStreamReader 的区别 这个问题已经发了一贴了,但很遗憾,字节流和字符流的争论都没有结果。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 inputStream-----字节流-----8个位------0 到 255 inputStreamReader-----字符流-----16各位-----0 到 65535自己理解(本人喜欢把复杂的问题的答案简单化以便记忆)--------------------------------------------------------搞这个的时候看的东西http://blog.csdn.net/wujilin/archive/2008/09/19/2953283.aspxhttp://flysky.javaeye.com/blog/44292 严重声明:这是真正混淆的地方:另一贴中:引用 1 楼 sunxing007 的回复:不对! 一个字符是两个字节, 可以说字节比字符低级, 或者说字符是对字节的包装, 字节流可以读取任何文件, 可以说字符流可以做到的事情, 字节流都可以做到, 反之则不可以. 但字节流效率比较低下. 给你举个例子, 有一次我们有个需求, 要读取一个pdf文件, 我开始用字符流BufferedReader读取, 结果读出来的文件是乱码, 换成FileInputStream就可以了, 这是因为pdf文件是二进制文件, 那你一个字节一个字节的读取, 会破坏文件. 只… 这为兄弟恰好说反了FileInputStream不能读字节,FileReader是用来读字符的,你说的BufferedReader它是用来过滤FilReader,将转换过来的字符放在缓冲区里面,然后从缓冲区里面进行读取,随便提下:BufferedReader里面有个很好用的方法readLine(),一次读取一行字符. 计算机里最基本的单位是字节,按字节读肯定不会出问题的。也就是2进制格式,word也是属于字节流字符流可以一次读写两个字节,对于现在的32位64位计算机来说,效率会提高很多,但是常常会断章取意,认为所有的信息都是按16位来存储的,遇上非字符存储的,很容易会出错!我个人认为很有可能是高字节和低字节顺序的问题!或许用字符流连续读写两次文件就ok了!(存属猜想,未做实践证明) 多谢各位高手回答,我是新手,对字节和字符流看了几次书也没理解。今天略有理解。顺便问一下,这里很多人都是女头像。我认为编程高手中女性应该不多,是真的有这么多女的?还是由于搞编程的人压力大,所以很多人习惯用女性头像?因为我自己的GTALK也是用的梦露。 一个汉字,GBK编码是2个字节,UTF-8编码是三个字节如果你不确定编码类型,那么用字节处理最稳妥。 InputStream : int read() Reads the next byte of data from the input stream. The value byte is returned as an int in the range 0 to 255. InputStreamReader: int read() Reads a single character. 似乎字符流在SOCKET传输的时候总是出问题。 InputStreamReader来把InputStream适配为Reader类的。InputStream是 针对byte(8位),而Reader是针对char(16位),要支持中文也必须得用16位的Reader。InputStream inStream = null;InputStreamReader reader = null;inStream = file.getContents();reader = new InputStreamReader(inStream); 1) File file = new File ("hello.txt"); FileInputStream in=new FileInputStream(file); 2) File file = new File ("hello.txt"); FileInputStream in=new FileInputStream(file); InputStreamReader inReader=new InputStreamReader(in); BufferedReader bufReader=new BufferedReader(inReader); 3) File file = new File ("hello.txt"); FileReader fileReader=new FileReader(file); BufferedReader bufReader=new BufferedReader(fileReader); 据说 这么用比较好 inputStream-----字节流-----8个位------0 到 255 inputStreamReader-----字符流-----16各位-----0 到 65535 InputStreamReader的构造方法 InputStreamReader(InputStream in) 。这里InputStream是一个抽象类。 http://www.shangxuetang.cn/html/wentijihe/200810/09-32.html public abstract class InputStream 返回 0 到 255 范围内的 int 字节值public class InputStreamReader InputStreamReader 是字节流通向字符流的桥梁 求助,关于socket问题 org.w3c.dom 知道网关的帐号和登录密码如何通过socket建立连接? ResourceBundle主要什么时候用到?我以前没有用过, 关于java socke的问题 请问怎样用eclipse3.1来建一个像helloworld那样的最简单的jsp网页啊?能不能说说具体的操作步骤啊?谢谢! 一道简单的选择题,为什么E不对啊?就是个合法的标示符,尽管它是关键字 关于图片处理问题 事件控制, 在同一面板上画多个几何图形的问题 多态问题 关于垃圾回收 有关HashMap的问题
inputStreamReader-----字符流-----16各位-----0 到 65535
自己理解(本人喜欢把复杂的问题的答案简单化以便记忆)
--------------------------------------------------------
搞这个的时候看的东西
http://blog.csdn.net/wujilin/archive/2008/09/19/2953283.aspx
http://flysky.javaeye.com/blog/44292
这是真正混淆的地方:另一贴中:
引用 1 楼 sunxing007 的回复:
不对!
一个字符是两个字节, 可以说字节比字符低级, 或者说字符是对字节的包装,
字节流可以读取任何文件, 可以说字符流可以做到的事情, 字节流都可以做到, 反之则不可以. 但字节流效率比较低下.
给你举个例子, 有一次我们有个需求, 要读取一个pdf文件, 我开始用字符流BufferedReader读取, 结果读出来的文件是乱码, 换成FileInputStream就可以了, 这是因为pdf文件是二进制文件, 那你一个字节一个字节的读取, 会破坏文件. 只…
这为兄弟恰好说反了FileInputStream不能读字节,FileReader是用来读字符的,你说的BufferedReader它是用来过滤FilReader,将转换过来的字符放在缓冲区里面,然后从缓冲区里面进行读取,随便提下:BufferedReader里面有个很好用的方法readLine(),一次读取一行字符.
字符流可以一次读写两个字节,对于现在的32位64位计算机来说,效率会提高很多,但是常常会断章取意,认为所有的信息都是按16位来存储的,遇上非字符存储的,很容易会出错!我个人认为很有可能是高字节和低字节顺序的问题!或许用字符流连续读写两次文件就ok了!(存属猜想,未做实践证明)
顺便问一下,这里很多人都是女头像。
我认为编程高手中女性应该不多,是真的有这么多女的?
还是由于搞编程的人压力大,所以很多人习惯用女性头像?
因为我自己的GTALK也是用的梦露。
Reads the next byte of data from the input stream. The value byte is returned as an int in the range 0 to 255. InputStreamReader: int read()
Reads a single character.
InputStream是 针对byte(8位),而Reader是针对char(16位),要支持中文也必须得用16位的Reader。InputStream inStream = null;
InputStreamReader reader = null;inStream = file.getContents();
reader = new InputStreamReader(inStream);
FileInputStream in=new FileInputStream(file);
2) File file = new File ("hello.txt");
FileInputStream in=new FileInputStream(file);
InputStreamReader inReader=new InputStreamReader(in);
BufferedReader bufReader=new BufferedReader(inReader);
3) File file = new File ("hello.txt");
FileReader fileReader=new FileReader(file);
BufferedReader bufReader=new BufferedReader(fileReader); 据说 这么用比较好
inputStreamReader-----字符流-----16各位-----0 到 65535
返回 0 到 255 范围内的 int 字节值public class InputStreamReader
InputStreamReader 是字节流通向字符流的桥梁