再论InputStream 和 InputStreamReader 的区别

孤尽JavaSea 2008-10-06 05:20:34
这个问题已经发了一贴了,
但很遗憾,字节流和字符流的争论都没有结果。
...全文
459 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
aoliwen521 2008-10-09
  • 打赏
  • 举报
回复
似乎字符流在SOCKET传输的时候总是出问题。
liujiaqwer 2008-10-09
  • 打赏
  • 举报
回复
up
hwxiang 2008-10-09
  • 打赏
  • 举报
回复
public abstract class InputStream
返回 0 到 255 范围内的 int 字节值

public class InputStreamReader
InputStreamReader 是字节流通向字符流的桥梁
ericax 2008-10-09
  • 打赏
  • 举报
回复
up
云淡天晴 2008-10-09
  • 打赏
  • 举报
回复
InputStreamReader的构造方法 InputStreamReader(InputStream in) 。这里InputStream是一个抽象类。 http://www.shangxuetang.cn/html/wentijihe/200810/09-32.html
java__king 2008-10-09
  • 打赏
  • 举报
回复
inputStream-----字节流-----8个位------0 到 255
inputStreamReader-----字符流-----16各位-----0 到 65535
冰思雨 2008-10-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 Java_gannbare 的帖子:]
这个问题已经发了一贴了,
但很遗憾,字节流和字符流的争论都没有结果。
[/Quote]
不知道有什么可争论的。
说来听听,或者把连接给出来,看看。
chendabian 2008-10-09
  • 打赏
  • 举报
回复
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);

据说 这么用比较好
xuhua205 2008-10-09
  • 打赏
  • 举报
回复
散分就接分吧
  • 打赏
  • 举报
回复
InputStreamReader来把InputStream适配为Reader类的。
InputStream是 针对byte(8位),而Reader是针对char(16位),要支持中文也必须得用16位的Reader。

InputStream inStream = null;
InputStreamReader reader = null;

inStream = file.getContents();
reader = new InputStreamReader(inStream);
fulianglove 2008-10-09
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 ouyangxiaokang6 的回复:]
lz 说的对。
[/Quote]
hao!!!
ouyangxiaokang6 2008-10-09
  • 打赏
  • 举报
回复
lz 说的对。
sure2003 2008-10-08
  • 打赏
  • 举报
回复
InputStream是抽象类
humcomm 2008-10-06
  • 打赏
  • 举报
回复
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.
老紫竹 2008-10-06
  • 打赏
  • 举报
回复
一个汉字,GBK编码是2个字节,UTF-8编码是三个字节
如果你不确定编码类型,那么用字节处理最稳妥。
aoliwen521 2008-10-06
  • 打赏
  • 举报
回复
多谢各位高手回答,我是新手,对字节和字符流看了几次书也没理解。今天略有理解。
顺便问一下,这里很多人都是女头像。
我认为编程高手中女性应该不多,是真的有这么多女的?
还是由于搞编程的人压力大,所以很多人习惯用女性头像?
因为我自己的GTALK也是用的梦露。
孤尽JavaSea 2008-10-06
  • 打赏
  • 举报
回复
7楼是我楼主啊,晕啊,大家吗?
ycyn521 2008-10-06
  • 打赏
  • 举报
回复
今天刚听了万欣老师对这一节的讲解,7楼的兄弟说的很对!
hitzsf 2008-10-06
  • 打赏
  • 举报
回复
计算机里最基本的单位是字节,按字节读肯定不会出问题的。也就是2进制格式,word也是属于字节流
字符流可以一次读写两个字节,对于现在的32位64位计算机来说,效率会提高很多,但是常常会断章取意,认为所有的信息都是按16位来存储的,遇上非字符存储的,很容易会出错!

我个人认为很有可能是高字节和低字节顺序的问题!或许用字符流连续读写两次文件就ok了!(存属猜想,未做实践证明)
alile_420 2008-10-06
  • 打赏
  • 举报
回复
接分,虽然我也认为没有可比性
加载更多回复(7)
/** * 一、BufferedReader类 public class BufferedReader extends Reader * 从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。 可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值足够大。 * 通常,Reader 所作的每个读取请求都会导致对底层字符或字节流进行相应的读取请求。因此,建议用 BufferedReader包装所有其 read() * 操作可能开销很高的 Reader(如 FileReader和 InputStreamReader)。 * BufferedReader流能够读取文本行,通过向BufferedReader传递一个Reader对象 * ,来创建一个BufferedReader对象,之所以这样做是因为FileReader没有提供读取文本行的功能. * * 二、InputStreamReader类 * * InputStreamReader 将字节流转换为字符流。是字节流通向字符流的桥梁。如果不指定字符集编码,该解码过程将使用平台默认的字符编码,如:GBK。 * * 构造方法: * * InputStreamReader isr = new InputStreamReader(InputStream * in);//构造一个默认编码集的InputStreamReader类 * * InputStreamReader isr = new InputStreamReader(InputStream in,String * charsetName);//构造一个指定编码集的InputStreamReader类。 * * 参数 in对象通过 InputStream in = System.in;获得。//读取键盘上的数据。 * * 或者 InputStream in = new FileInputStream(String fileName);//读取文件中的数据。可以看出 * FileInputStreamInputStream的子类。 * * 主要方法:int read();//读取单个字符。 int read(char []cbuf);//将读取到的字符存到数组中。返回读取的字符数。 * * 三、FileWriter(少量文字) 和 BufferedWriter(大量文字)实现简单文件写操作 * @author hulk */

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧