java IO基础学习

JavaIO学习

一、字节流和字符流

字节流和字符流都包括输入和输出操作,字节流中输出数据主要使用OutputStream完成,输入使的是InputStream,在字符流中输出主要使用Writer类完成,输入主要是使用Reader类完成。

内容操作四个类:OutputStream,InputStream,Writer,Reader 这四个类都是抽象类。

IO操作的响应步骤:(1)首先使用File类打开一个文件

             (2)通过字节流或字符流的子类,指定输出的位置

             (3)进行读/写操作

             (4)关闭输入/输出

IO操作属于资源操作,在操作完毕后必须关闭,否则肯恩会出现未知错误。

二、字节流

字节流操作的是byte类型的数据。所有的数据基本上都可以用byte数组表示出来

OutputStream是字节输出流的最大父类,在操作的时候如果文件不存在,则会为用户创建新文件。

InputStream是字节输入流的最大父类,如果是从文件中读取,子类一定是FileInputStream。

OutputStream和InputStream都是抽象类。

三、字符流

字符流操作的是字符

Writer类,和OutputStream相比,Writer更加方便,因为不用把想要输出的字符转换成byte

Reader类,和InputStream相比基本上相同,只是用来接收数据的一个是byte数组,一个是char数组。

四、字节流和字符流的区别

1.字节流在操作的时候本身是不会用到缓存区(内存)的,是与文件本身直接操作的,而字符流在操作的时候是使用到缓冲区的。

2.字符流在操作时,操作内容会先保存在缓冲区,只有刷新缓冲区的时候才能输出相应的操作。

五、开发中的使用

字符只有在内存中才会形成,所以最好使用字节流操作文件

六、字节流和字符流之间的转换

OutputStreamWriter是Writer的子类,是把字符流的输出对象转化为字节流对象。

InputStreamReader是Reader的子类,是把字节流的输入对象转化为字符流对象。

FileWriter不是Writer的子类,而是转换流OutputStreamWriter的子类

FileReader不是Reader子类,而是转化流InputStreamReader的子类

传输或者是从文件中读取数据的时候,文件里真正保存的数据永远是字节。

七、内存操作流

ByteArrayInputStream的主要完成将内容输入到内存中

ByteArrayOutputStream的主要功能是将内存中的内容输出出来。

通过实例化其子类的不同,完成的功能也不同,也就相当于输出位置也就不同,如果文件,则使用Filexxx,如果是内存,则使用ByteArrayxxxxx。

八、管道流

管道输出流PipedOutputStream,管道输入流PipedInputStream。管道流主要是实现两个线程之间的输出流和输入流。

九、打印流、

字节流PrintStream,字符流PrintWriter。PrintStream可以指定输出位置

PrintStream可以方便的完成输出的功能,属于装饰设计模式

十、System对IO的三种支持

System.Out, System.in, System.err;

System.Out是希望用户看到的。

System.err是不希望用户看到的。

输入输出重定向

十一、BufferReader类

  System.in是接收的字节流数据,而BufferReader存放的是字符流,所以实例化时现用InputStreamReader将字节流转换为字符流。

十二、Scanner类

  1.Scanner方便读取数据

  2.在读取操作时注意分隔符

十三、数据操作流

  数据输出流DataOutputStream

  数据输入流DataInputStream

  使用DataOutputStream输出的数据要用DataInputStream读取出来

十四、对象序列化

  1.什么叫对象序列化:

    一个对象产生后实际上是在内存中开辟了存储空间,序列化就是把对象转化为二进制的数据流的方法,一个类不能平白无故的被序列化

  2.序列化对象的时候实际上就是序列化的对象属性

  3.serializable和enternalizable

你可能感兴趣的:(java IO基础学习)