java IO

Click_Me 2009-10-15 10:34:32

java IO里有个OutputStreamWriter 和 InputStreamReader 说作用是转换流.
比如:
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("d:/test.txt"));
这样的好处是 将File这个字节流可以以字符的形式操作.
我搞不懂为啥要这么包装? 直接用FileWriter就得了.他就是字符流呀.

还有.IO一般用在什么地方.哪几个类比较常用?
...全文
120 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wekui 2009-10-15
  • 打赏
  • 举报
回复
先占个位置
dajiadebeibei9 2009-10-15
  • 打赏
  • 举报
回复
过滤流和包装类是定义在节点流的基础之上的。程序中可以通过一个间接的流类去调用节点流类,以达到更加灵活方便的读取给种类型的数据,这个间接的流类就叫做过滤流类,也叫包装类。如果我们仅仅使用节点流类虽然也可以达到输入输出的目的,但是我们必须先将其他类型的数据的数据转换成字节数组后写入文件或是将从文件中读取的字节数组转换成其他类型,这样带来了一些困难和麻烦。因此就引入了包装类作为一个中间类,这个中间类提供了读写各种类型的数据的各种方法,在这个中间类的方法内部可以将其他数据类型装换为字节数组,然后调用底层的节点类将这个字节数组写入目标设备。过滤流类的引入方便了数据的读写。

BufferedInputStream与BufferedOutputStream类,缓冲流为IO流增加了内存缓冲区,增加缓冲区有两个基本目的:

1、允许Java程序一次不止操作一个字节,提高了程序的性能

2、由于有了缓冲区,使得在流上执行skip,mark和reset方法都成为可能

BufferedInputStream与BufferedOutputStream是Java提供的两个缓冲区包装类,不管底层系统是否使用了缓冲区,这两个类在自己的实例对象中创建缓冲区。

DataInputStream与DataOutputStream类

DataInputStream允许应用程序以与机器无关方式从基础输入流中读取基本 Java 数据类型。应用程序可以使用DataOutputStream写入稍后由数据输入流读取的数据。

PrintStream类

PrintStream类提供了一系列的print和println方法,可以将基本数据类型的数据格式化成字符串输出。

ObjectInputStream与ObjectOutputStream这两个包装类,用于从底层输入流中读取对象类型的数据和将对象类型的数据写入到底层输出流。

这两个类所读写的对象必须实现了Serializable接口。对象中的translent和static类型的成员变量不会被读取和写入。

字节流与字符流的转换

InputStreamReader和OutputStreamWriter是用于将字节流转换成字符流来读写的两个类。 InputStreamReader可以将一个字节流中的字节解码成字符后读取,OutputStreamWriter将字符编码成字节后写入到一个字节流中。
loveofmylife 2009-10-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 click_me 的回复:]
如果这样看 貌似 字节流有点鸡肋啊.. 能有字符谁用字节干嘛. Buffered确实值得用来装饰.可以用
readLine();
[/Quote]
此言差矣,字节流很有用的,在那些无需面向字符的i/o程序中我们就应该首选字节流,而且那些二进制文件,比如zip文件,是必须要用字节流传输的
zl3450341 2009-10-15
  • 打赏
  • 举报
回复
自己选择用那个就哪个

能实现功能就好
runshine 2009-10-15
  • 打赏
  • 举报
回复
字节流有点鸡肋啊.. 能有字符谁用字节干嘛

并非所有的文件都是文本文件

直接用FileWriter就得了

如果你操作的文本的编码和你本地码相同你这样可以
但也有的情况是涉及编码转换的

IO一般用在什么地方

IO无处不在
tornadoxing 2009-10-15
  • 打赏
  • 举报
回复
有时候需要从键盘输入的时候,需要转化成字符的时候就可能要用到
BufferedReader bd =new BufferedReader(new OutputStreamReader(System.in));不见得都是对于文件的操作
swandragon 2009-10-15
  • 打赏
  • 举报
回复
用什么类没关系,能实现功能就行
io主要用来读写文件,对象序列化操作
Click_Me 2009-10-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 skambc 的回复:]
java io 的操作比较灵活,对一种问题可能有多种方式,自己根据习惯选一个就可以了。
io 一般就是用到文件操作或系统的导入导出里面,比较常用的是BufferReader,它的readline()可以读取文件里的具体行,其它的类根据具体情况自己选就是了,反正字节流和字符流都能相互转换,基本上都能转成你想要的流。
[/Quote]
恩 我当时感觉有点迷惑.看了真是这样.流都可以转化.只要转化成合适的就可以了..
如果这样看 貌似 字节流有点鸡肋啊.. 能有字符谁用字节干嘛. Buffered确实值得用来装饰.可以用
readLine();
skambc 2009-10-15
  • 打赏
  • 举报
回复
java io 的操作比较灵活,对一种问题可能有多种方式,自己根据习惯选一个就可以了。
io 一般就是用到文件操作或系统的导入导出里面,比较常用的是BufferReader,它的readline()可以读取文件里的具体行,其它的类根据具体情况自己选就是了,反正字节流和字符流都能相互转换,基本上都能转成你想要的流。
dlnu05610 2009-10-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 click_me 的回复:]
引用 1 楼 skambc 的回复:
java io 的操作比较灵活,对一种问题可能有多种方式,自己根据习惯选一个就可以了。
io 一般就是用到文件操作或系统的导入导出里面,比较常用的是BufferReader,它的readline()可以读取文件里的具体行,其它的类根据具体情况自己选就是了,反正字节流和字符流都能相互转换,基本上都能转成你想要的流。

恩 我当时感觉有点迷惑.看了真是这样.流都可以转化.只要转化成合适的就可以了..
如果这样看 貌似 字节流有点鸡肋啊.. 能有字符谁用字节干嘛. Buffered确实值得用来装饰.可以用
readLine();
[/Quote]
字节流对于非字符型的文件比较好用,比如:*.jpg。
字符流对于TXT之类的比较好用
Click_Me 2009-10-15
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 lxxzhy 的回复:]
假如要做的事情是复制一个EXE文件,那么字符流连个鸡肋都不是,只能叫无能为力.
[/Quote]
恩 知道了 比如赋值图片之类等等 二进制文件 就用字节
谢谢大家的回复...
lxxzhy 2009-10-15
  • 打赏
  • 举报
回复
假如要做的事情是复制一个EXE文件,那么字符流连个鸡肋都不是,只能叫无能为力.
lxxzhy 2009-10-15
  • 打赏
  • 举报
回复
不是所有事物都是字符来的,只是刚好你碰到的一些都是,所以才会觉得字节流是鸡肋.

62,614

社区成员

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

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