关于java流的见解

l  流

主要目的是:数据进行磁盘和内存的互换

流相关的API都在java.io包里面

 

流按照方向分有两种:

输入流输出流,是以内存作为参照物

输入(读取)流:从数据源中,将数据读取到内存中

输出(写入)流:将内存中的数据写入到数据源

 

 

流按照传输的内容分三种

字节流,字符流,对象流   

无论是哪一种流,底层部分都是以字节方式传输的。所以,其本质都是字节流,但是为了方便程序员更好的操作字符数据和对象数据,在字节流基础上做了一层包装,形成了字符流和对象流。

 

API层次

字节流   的抽象父类是  InputStream和OutputStream  

字符流   的抽象父类是  Reader和Writer

对象流    

 

l 流操作的步骤

1,  建立流

2, 操作流

3, 关闭流

需要知道的小常识:

操作文件流时,如果文件不存在,那么,读取流会抛出文件未找到异常,而写入流会创建文件

关闭流的操作顺序。先读写流后写入流的话就先关写入流再关读写流。

 

 

字节写入和字符写入覆盖问题

FileOutputStrea(地址,true) 后面加true就代表拼接,不加就直接覆盖

FileWriter(地址,true)

 

 

 

l  流操作完成以后必须完成关闭,否则不仅浪费内存资源,而且写入流有可能写不进数据。

 

 

对象流

当需要对对象进行传输时,由于对象中的数据很庞大,无法直接传输。那么在传输之前,需要将对象打散成二进制的序列,以便传输。这个过程称为序列化过程

到达目的之后,又需要将二进制序列还原成对象,这个过程称为反序列化过程

 

对象要必须实现java.io.Serializable接口才能进行序列化

 

l  异常:java.io.NotSerializableException 

当需要传输对象时,而该对象所在的类没有实现(Serializable)序列化接口时抛出

 

transient关键字

给对象的属性做修饰的,表示在传输对象时,被transient修饰的属性值不做传输


你可能感兴趣的:(java基础,流,文件的传输)