数据输入流:DataInputStream
DataInputStream(InputStream in)
数据输出流:DataOutputStream
DataOutputStream(OutputStream out)
内存操作流:用于处理临时存储信息的,程序结束,数据就从内存中消失
操作字节数组
ByteArrayIntputStream
ByteArrayOutputStream
操作字符数组
charArrayReader
charArrayWriter
操作字符串
StringReader
StringWriter
打印流特点:
只能操作目的地,不能操作数据源
可以操作任何类型的数据
如果启动了自动刷新,能够自动刷新
可以操作文件的流(打印流复制文本文件)
流:
基本流:就是能够直接读写文件的流;
高级流:在基本流的基础上提供了一些其他的功能
哪些流对象可以直接操作文本文件呢
FileInputStream
FileOutputStream
FileReader
FileWriter
PrintStream
PrintWriter
看API,查流对象的构造方法,如果同时有File类型和String类型的参数,一般来说就是可以直接操作文件的流
PrintWriter
1.可以操作任意类型的数据
print() println()
2.启用自动刷新
PrintWriter pw=new PrintWriter(new FileWriter("pw.txt",true));
还是应该调用println的方法才可以
这个时候不仅仅自动刷新了 还实现了数据的换行
println()等价于
bw.writer();
bw.newLine();
bw.flush();
标准输入输出流
system类中的字段:in,out
它们各代表了系统标准的输入和输出设备
默认输入设备是键盘,输出设备是计算器
System.in的类型是InputStream
System.out的类型是PrintStream是OutputStream的子类FilterOutputStream的子类
键盘录入数据:(三种)
A:main方法的arg接收参数
java helloWorld hello world java
B:Scanner(JDK5以后的)
Scanner sc=new Scanner(System.in);
String sc=sc.nextLine();
int x=sc.nextInt();
C:通过字符缓冲流包装标准输入流实现
BufferedReader br=new BufferedReader(new InputStreamReader(System.in))
String line=br.readLine();
int i=Integar.parseInt(br.readLine());
随机访问流
RandomAccessFile概述
RandomAccessFile类不属于流,是Object类的子类,但它融合了InputStream和OutputStream的功能,支持对随机访问文件读取和写入
public RandomAccessFile(String name,String mode):
第一个参数是文件的路径,第二个参数是操作文件的模式,模式有四种,我们最常用的一种叫“rw”,这种方式表示我既可以读也可以写数据
合并流:
SequenceInputStream概述
SequenceInputStream类可以将多个输入流串流在一起,合并为一个输入流,因此该流也称为合并流
SequenceInputStream的构造方法
SequenceInputStream(InputStream s1,InputStream s2)
sequenceInputStream(Enumeration<?extends InputStream> e)
把多个文件的内容写入到一个文本文件
序列化流:
把对象按照流一样的方式存入文本文件或在网络中传输
objectOnputStream 对象-------------->数据流
反序列化流:
把文本文件或网络中的流对象数据还原成对象
objectInputStream 数据流---------->对象
实现序列化:
注意:为序列化异常(NotserializableException)
类通过实现java.io.Serializable 接口以启用序列化功能,未实现此接口将无法使其任何状态序列化和反序列化(该接口居然没有任何方法,类似这种没有方法的子类被称为标记接口)
我们要知道的是:
看到此类实现了序列化接口的时候,想要解决黄色警告线的问题,就可以自动产生一个序列化ID值,而产生这个值以后,我们对类的任何 改动,它读取以前的数据是没有问题的
注意:一个类中可能有很多成员变量,有些我们不想序列化,请问该怎么办呢,使用transient关键字声明不需要序列化的成员变量