(3)字节流

来源:互联网 发布:mit公开课 矩阵理论 编辑:程序博客网 时间:2024/06/08 22:02
 

11,08,31

今天课堂主要内容:

12.3 字节流

抽象基类InputStream、OutputStream

1、  字节输入流:InputStream类是所有面向字节的输入流的父类。

InputStream类中声明了用于字节流输入的多个方法,包括读取数据、标记位置、获取数据量、关闭数据流等。

属于InputStream类的常用方法如下:

read();从流中读入数据

skip();跳过流中若干字节数。

available();返回流中可用字节数。

mark();在流中标记一个位置。

reset();返回标记过的位置。

markSupport();是否支持标记和复位操作。

close();关闭流。

2、  字节输出流:OutputStream()类为所有面向字节的输出的父类。、

OutputStream类中声明了用于字节流输出的多个方法,包括写出数据、刷新缓冲区、关闭数据流等。

       属于OutputStream类的常用方法如下:

       write(int b);将一个整数输出到流中。

       write(byte b[]);将数组中的数据输出到流中。

       write(byte b[],int off,int len);将数组b中从off指定的位置开始len长度的数据输出到流中。

       flush();将缓冲区中的数据强制送出。

       close();关闭流。

3、  read();使用read()方法可以访问文件的一个字节、几个字节或整个文件。提升为int类型数据。

available();有多少个字节可读。

4、  标准的输入输出是指在控制台方式下,程序与系统进行交互的方式,分为三种:

标准的输入,对象是键盘。

标准的输出,对象是显示器屏幕。

标准的错误输出,对象也是显示器屏幕。

关于从键盘输入的操作:

System.in   :标准输入流

System.out  :标准输出流

System.error :标准错误流

System类在 java.lang 包下。

5、  字符流和字节流

字符流:                                                                       字节流:

Reader                                                                           InputStream

        InputStreamReader 转换流                                                    FileInputStream

        FileReader      转换流                                                            BufferedInputStream

        BufferedReader                                                                    

Writer                                                                            OutputStrteam

        OutputStreamWriter 转换流                                                  FileOutputStream

        FileWriter       转换流                                                            BufferedOutputStream

        BufferedWriter                                                                     

注意:(1)要确认好是输入流还是输出流

        (2)要确认好是字符流还是字节流

        (3)是否要使用处理流

6、补充——转换流

在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在一组字节流—字符流的转换流。

(1)

a)         OutputStreamWriter:是Writer的子类,将输出的字符流变为字节流,即:将一个字符流的输出对象变为字节流的输出对象。字符到字节的桥梁.

              b)  InputStreamReader:是Reader的子类,将输入的字节流变为字符流,即:将一个字节流的输入对象变为字符流的输入对象。字节到字符的桥梁.

                     这俩个均属于字符流的体系。

       (2)转换过程;

              写入数据:字符流—>字节流

              读取数据:字节流—>字符流

以文件操作为例,则在内存中的字符数据需要通过OutputStreamWriter变为字节流才能保存在文件中,读取的时候需要讲读入的字节流通过InputStreamReader变为字符流

(3)OutputStreamWriter和InputStreamReader的构造—他们本身是字符流,又具有转换的作用,因此在构造的时候,需要传入字节流对象

(4)例子:

              public OutputStreamWriter(OutputStream out)   注:转换流的参数都是字节流对象

              Public OutputStreamWriter(OutputStream out,charse Name) 指定编码方案

注意:编码方式

.(5)

操作文件的字符流FileReader和FileWriter是转换流的子类,因此从他们的继承关系就可以清楚的发现,不管是使用字节流还是字符流实际上最终都是以字节的形式操作输入和输出的。

(6)注意:在使用FileReader操作文本数据时,该对象使用的是默认的编码表。如果要使用指定编码表时,必须使用转换流。

 

FileReader fr = new FileReader("a.txt");

//操作a.txt的中的数据使用的本系统默认的GBK

 

InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"));

 

7、  字节流是最基本的。

8、  对字节流和字符流的区分:

(1)字节流可以操作任何数据

(2)字符流使用的是字符数组;字节流使用的是字节数组

总结:

9、流操作的基本规律。

(1)明确数据源和数据宿。
-----其实是为了明确输入流还是输出流。

a)数据源:键盘System.in、磁盘文件(以File开头的流对象)、内存(数组)

b) 数据宿:控制台System.out、磁盘文件(以File开头的流对象)、内存(数组)

(2)明确操作的数据是否是纯文本数据。
-----其实是为了明确字符流还是字节流。

10、数据源:System.in

既然是源,使用的就是输入流,可用的体系有InputStream,Reader。

因为键盘录入进来的一定是纯文本数据,所以可以使用专门操作字符数据的Reader。

发现System.in对应的流是字节读取流。所以要将其进行转换,将字节转成字符即可。因此要使用Reader体系中InputStreamReader。

11、数据宿:一个磁盘文件

既然是数据宿,那么一定是输出流,可以用的OutputStream、Writer。

往文件中存储的都是文本数据,那么可以使用字符流较为方便:Writer.

因为操作的是文件,所以使用Writer中的FileWriter。

12、附加需求:希望将这些文本数据按照指定的编码表存入文件中。

既然是文本数据,而是还是写入到文件中,那么使用的体系还是Writer。

因为要指定编码表,所以要使用Writer中的转换流,OutputStreamWriter。

是否要提高效率,是,选择BufferedWriter。

注意:虽然是最终是文件,但是不可以选择FileWriter。因为该对象是使用默认编码表。

输出转换流要接收一个字节输出流进来,所以要是用OutputStram体系,而最终输出到一个文件,那么就要使用OutputStream体系中可以操作的文件的字节流对象:FileOutputStream。

 

课堂感受

对于前两天,我感觉今天是学的最好的一天。老师讲的大部分都明白了,而且今天的作业也是比较好的完成了。挺开心的吧,以后还要这样继续努力吧!加油!

 

原创粉丝点击