黑马程序员技术交流社区

标题: 新手:关于Java中io流方向的困惑 [打印本页]

作者: 郑璋安    时间: 2012-7-14 22:03
标题: 新手:关于Java中io流方向的困惑
本帖最后由 郑璋安 于 2012-7-15 12:00 编辑

最近看到毕老师视频的IO部分讲到Writer、Reader、InputStream、OutputStream等类,看到这些类的名字就直觉地以为Writer类往硬盘中写,而Reader是往内存中写。InputStream为输入流嘛,直觉以为也是往内存中写,而OutputStream为输出流,就以为是往硬盘中写,总之在头脑里不能形成一个清晰的流概念,老是搞混淆,看视频也就很难跟上进度了。谁能告诉我这四个对象流到底是如何流向的。还有把一个文件(源文件)拷贝到另一个盘符的文件(目标文件),这里的输入流和输出流又是什么,该用什么具体的类表示?
作者: 黑马刘涛    时间: 2012-7-14 22:20
本帖最后由 黑马刘涛 于 2012-7-14 22:28 编辑

Writer、Reader、InputStream、OutputStream不难记,记住记好了。writer,OutputStream就是写,至于写的目的地无非是控制台和硬盘文件。
Reader、InputStream就是读,读的源无非就是内存和硬盘里的文件(文件也要先读入到内存中)。有些东西是规定性的,就跟单词一样,他就是这个意思,规定。
  1. FileWriter fw = new FileWriter("SystemDemo_copy.txt");// 文件写入流
  2. FileReader fr = new FileReader("SystemDemo.java"); //  文件读取流
复制代码
涉及文件读写的,用文件流。建议在看视频的时候自己也跟老师查看下API文档,最好看看中文版的。这些东西一遍看不懂就多看两遍,然后自己把老师写的例子写一下。不要对照着写,写出来自己编译,遇到编译不通过的自己调试,查看文档。这样提高快些。
作者: 陆强强    时间: 2012-7-14 22:22
本帖最后由 陆强强 于 2012-7-14 22:25 编辑

IO流的命名只分设备和流内两个对象。
InputStream(设备):In  put it  to  out,就是把流里的东西往外界丢。(指设备)
OutputStream(设备):out  put  it to in,把外界设备的东西扔进流里。
reader和writer都是以传入参数为对象的。
reader是读取参数所指设备中的字符;
writer是将字符写入参数所指设备。
作者: 彭超华    时间: 2012-7-14 22:33
IO流的操作规律
                A:操作数据源和目的地的流
                        **数据源
                                Reader,InputStream
                        **目的地
                                Writer,OutputStream

                B:看是否是文本文件
                        是:
                                数据源:FileReader
                                目的地:FileWriter
                        不是:
                                数据源:FileInputStream
                                目的地:FileOutputStream
               
                C:看设备
                        数据源:键盘录入(System.in),内存(数组和字符串),文件
                                **当录入的数据你想一次读取一行.
                                  就要使用转换流.
                                  InputStreamReader isr = new InputStreamReader(System.in);
                        目的地:控制台输出(System.out),内存(数组和字符串),文件
                                **当在控制台打印的时候,想用字符的方式
                                  使用转换流
                                  OutputStreamWriter osw = new OutputStreamWriter(System.out);
作者: 王飞    时间: 2012-7-14 22:34
我来回答
输出流是往-----外面输出                 (可以是控制台,硬盘上的文本文件之类的),总之记住输出就是从  -------程序中往外面输出
输入流是往-----程序当中流入            也就是读取,把硬盘上的文本文件之类的读取到程序当中来运行

当一看到Writer或者Output时就要想到是      往程序的外面写东西,  然后就可以做相应的写出操作看了
当一看到Read和iIput时就要想到      是从外面读取数据到程序中来    然后就可以做读取数据的操作了

操作字节文件(MP3,视频、、、)时就要想到    Stream
操作字符文件(文本文件、、、)时就要想到     Reader

怎么  这解释行不啊,容易理解就行{:soso_e183:}
作者: 郑璋安    时间: 2012-7-14 23:11
呵呵,楼上的说的很通俗,3楼的关于流的概念好像更广泛,但不好懂啊!
作者: 侯茂绵    时间: 2012-7-14 23:52


{:soso_e154:}字节流(原始数据),需要用户读入后进行相应的编码转换。 由InputStream和OutputStream处理

{:soso_e152:}字符流基于自动转换而实现,读取数据时会把数据按照JVM的默认编码自动转换成字符。 由Reader和Writer处理。






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2