IO流的分类

本文详细介绍了 Java 中的 IO 流概念,包括节点流、处理流等类型,并深入探讨了字节流与字符流的区别及应用场景。此外还讲解了对象序列化、反序列化的实现方法及其注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


流分类 使用分类 字节输入流 字节输出流 字符输入流 字符输出流
  抽象基类 InputStream OutputStream Reader Writer
节点流 访问文件 FileInputStream FileOutStream FileReader FileWriter
访问数值 ByteArrayInputStream ByteArrayOutStream CharArrayReader CharArrayWriter
访问管道 PipedInputStream PipedOutStream PipedReader PipedWriter
访问字符串     StringReader StringWriter
处理流 缓冲流 BufferedInputStream BufferedOutputStream BufferedReader BufferedWriter
转换流     InputStreamReader OutputStreamWriter
对象流 ObjectInputStream ObjectOutputStream    
抽象基类(过滤) FilterInputStream FilterOutputStream FilterReader FilterWriter
打印流   PrintStream   PrintWriter
推回输入流 PushbackInputStream   PushbackReader  
特殊流 DataInputStream DataOutputStream    
总结:
1.Java IO是采用的是装饰模式,即采用处理流来包装节点流的方式,来达到代码通用性。
2.处理流和节点流的区分方法,节点流在新建时需要一个数据源(文件、网络)作为参数,而处理流需要一个节点流作为参数。
3.处理流的作用就是提高代码通用性,编写代码的便捷性,提高性能。

4.节点流都是对应抽象基类的实现类,它们都实现了抽象基类的基础读写方法。其中read()方法如果返回-1,代表已经读到数据源末尾。




1、ByteArrayInputStream:字节数组输入字节流--内存输入流   ***
(1)分类:字节流  输入流  节点流
(2)作用:读取内存(缓冲区)里的字节数据
(3)构造方法:
new FileInputStream(File file)
new ByteArrayIntputStream(byte[] b)//参数:对应的缓冲区
(4)方法:
read()....
close()
2、ByteArrayOutputStream:字节数组输出字节流--内存输出流***
(1)分类:字节流  输出流 节点流
(2)作用:把字节数据写到内存里(缓冲区)
(3)构造方法:
new ByteArrayOuputStream()
new ByteArrayOutputStream(int size)
(4)方法
write()...
close()
toByteArray *
toString:把内存里的数据直接变成字符串


3、对象的序列化(serialization)**
(1)何为对象的序列化?
把对象保存到文件里--->对象的序列化
(2)何为反序列化?
把文件里的数据读取出来形成对象--->反序列化
(3)作用:
a、永久保存数据(持久化)
b、可以在网络之间传输数据
(4)如何实现?
a、ObjectOutputStream:对象输出流
分类:字节流   输出流  处理流
作用:把对象序列化到文件里
b、构造方法
new ObjectOutputStream(OuputStream out)
c、方法:
writeObject():把对象写到文件里
(5)注意:
a、要序列化的对象--》类一定要实现Serializable接口
Serializable接口仅仅只是一中标识,表示这个类的对象
可以被序列化的
否则异常:java.io.NotSerializableException:
b、类里的属性必须要全部可序列化(包含其他类)
c、对于瞬态属性(transient)不能被序列化的
d、静态的属性也是不能被序列化的(内存存储只有一份)
e、serialVersionUID  5832446596546430553
-1633153781288661891
作用:在反序列化时,检测文件里的类的信息和现在类的信息是不是
一致;如果不一致,就异常
一般:自己生成版本号,不要让系统自动生成
(6)反序列化
a、ObjectInputStream:对象输入流
b、分类:输入流   字节流   处理流
c、构造方法:
new ObjectInputStream(InputStream in)
d、方法
readObject():读取对象 (强转)
注意:
用Externalizable 的接口来Serailizable 的扩展除了能存对象信息还能存数组,字符串  
 实现Externalizable 的接口必须要复写writeExternal () 和readExternal() 的方法  
才能有资格调用writeObject() 和readObject()  的方法,调用这两个方法   
其实就是调用的writeExternal() 和readExternal()  
可以根据需要定义除了对象别的数据形式。从这里说明了它是Serailizable的扩展  


4、RandomAccessFile:随机读写文件流 :独立于IO体系之外的一个类
(1)作用:可以通过指针的移动来随机读取(写入)文件的任意位置的信息
可以写入(读取)java风格数据,读int  写一个double
(2)构造方法:
new RandomAccessFile(File file,String auth)//第二个参数表示权限
//权限有两种:r  可读 rw 可读可写 
new RandomAccessFile(String path,String auth)
(3)方法:
seek(long position):移动指针,   seek(4) 
读取写入的时候从指针的后一个位置开始写入
getFilePointer:获取指针的位置
readInt():从指针的下一个位置开始读4个字节   
readShort()...
writeInt():从指针的下一个位置写数据
5、包装者模式:是一种设计模式
单例模式:
工厂模式:
适配器模式:(忽略)
包装者模式:扩展类的功能,可以减少类的个数(相比于继承来说)
(1)顶层接口-----Goods接口
(2)最基础的实现类----Coffee
(3)装饰类-----DecoratorBean
(4)具体的装饰角色---牛奶   巧克力    香草.....
有一个商品对象,都有计算价格方式  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值