Java IO中Rander/Writer类与InputStream/OutputStream类有何区别?
6个回答
2013-06-15
展开全部
InputStream\OutputStream\Reader\Writer构成了java.io的鼻祖。具体如下:InputStream和OutputStream类仅仅读取和写入单个的字节和字节数组,它们没有读取和写入字符串和数值的方法。对于Unicode文本,一个字符占用两个字节,所以出现了Reader和Writer。特别:ZipInputSteam和ZipOutputStream能读写常见的ZIP压缩格式的文件。InputStream、OutputStream、Reader、Writer类都实现了Closeable接口。OutputStream和Writer都实现了Flushable接口。FileInputStream和FileOutputStream能够把输入和输出流与磁盘文件关联起来。eg:FileInputStream fin = new FileInputStream("c:\\dev\\my.dat");------注意:最好使用反斜杠,反斜杠代表转义符使用。或者:File f = new File("c:\\dev\\my.dat');FileInputStream fin = new FileInputStream (f);用于读取字节:byte b = (byte)fin.read();用于读取数值:DataInputStream dis = new DataInputStream(fin);double d = dis.readDouble();FileInputStream没有读取数值的能力,但是DataInputStream也没有从文件中读取数值的方法,所以两者注定在一起结合使用!从上面我们可以知道:java的处理IO的两种策略:一些流(如FileInputStream)可以从文件及其他地方接收字节;另一些流(如DataInputStream和PrintWriter)可以将字节组合成更加有用的数据类型。eg:FileInputStream fin = new FileInputStream("c:\\dev\\my.dat");---------从文件中读取值,创建流DataInputStream dis = new DataInputStream(fin); --------结合后的流叫:过滤流(filtered stream)double d = dis.readDouble();默认情况下,流是不能进行缓冲处理的。就是每次对流进行read读取都要求操作系统发送一个新字节,若想要对当前目录下的文件进行缓冲和数据输入操作,应该利用FileInputStream和FileOutputStream它们的子类合并为一个新的过滤流。DataInputStream dis= new DataInputStream(new BufferedInputStream(new FileInputStream("c:\\dev\\my.dat")));PushbackInputStream pis = new PushbackInputStream(new BufferedInputStream(new FileInputStream("c:\\dev\\my.dat")));-------能够对流进行跟踪,如下:int b = pis.read(); -----读取下一个字节if(b != '<') pis.unread(b);--------不是自己想要的,把它扔回去但是read和unread是PushbackInputStream仅有的方法,若既想预查看,又想获取值,可以用:DataInputStream dis= new DataInputStream( pis = new PushbackInputStream(new BufferedInputStream(new FileInputStream("c:\\dev\\my.dat")));利用构造的真正实用的流序列,也为我们带来很大的灵活性。处理zip文件:ZipInputStream zip = new ZipInputStream(new FileInputStream("ocean.zip"));DataInputStream dis = new DataInputStream(zip);
2013-06-15
展开全部
Reader/Writer 按照字符流读取,也就每次读一个char类型InputStream/OutputStream 按照字节流读取,每次读一个byte类型
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
InputStream/OubputSteam是以字节为基本单位访问文件的可以认为它们所处理的是字节流。而Reader/Writer是以字符为基本单位访问文件的,从而可以认为读写器处理的是字符流。InputStream/OubputSteam可以很好的处理视频,声音等等素材,但是Reader/Writer在字符的处理上面有更大的优势,对于中文的支持比前者更好。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你要问的是Reader/Writer和InputStream/OutputStream的区别么吧
我是这么理解,前两个是对字符进行处理,后两个是对字节经行处理。
因此,前两个是可以对文本编码读取的,后面的只能获取字节数组
我是这么理解,前两个是对字符进行处理,后两个是对字节经行处理。
因此,前两个是可以对文本编码读取的,后面的只能获取字节数组
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐于2018-03-11
展开全部
一个字符流,一个是字节流。Reader/Writer支持16位的Unicode字符输出,InputStream/outputStream支持8位的字符输出。
Reader和InputStream分别是I/O库提供的两套平行独立的等级机构,InputStream、OutputStream是用来处理8位元的流,Reader、Writer是用来处理16位元的流。
而在JAVA语言中,byte类型是8位的,char类型是16位的,所以在处理中文的时候需要用Reader和Writer。
值得说明的是,在这两种等级机构下,还有一道桥梁InputStreamReader、OutputStreamWriter负责进行InputStream到Reader的适配和由OutputStream到Writer的适配。
Reader和InputStream分别是I/O库提供的两套平行独立的等级机构,InputStream、OutputStream是用来处理8位元的流,Reader、Writer是用来处理16位元的流。
而在JAVA语言中,byte类型是8位的,char类型是16位的,所以在处理中文的时候需要用Reader和Writer。
值得说明的是,在这两种等级机构下,还有一道桥梁InputStreamReader、OutputStreamWriter负责进行InputStream到Reader的适配和由OutputStream到Writer的适配。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询