一.IO流
根据流向可以分为输出流和输入流.
根据操作数据分为字符流和字节流.
一般永远用字节流,不会报错.有时为了间接方便,用字符流
判断依据通过windows自带的记事本,能够把这个文件打开,还能读懂,用字符流,否则字节流
(1)IO流分类:
字符流:字符输入流 读数据 Reader
字符输出流 写数据 Writer
字节流:字节输入流 读数据 InputStream
字节输出流 写数据 OutputStream
(2) 字符流写数据writer:
Writer是一个抽象类,去找它的子类使用,是 FileWriter.
FileWriter写入数据的方式有5种
A:write( int ch); 写入一个字节
B:write(char[] chs,int index,int length);写入一个字符数组中的一部分
C:write(char[] chs);写入一个字符数组
D:write(String str,int index,int length);写入一个字符串中的一部分
E:write( String str );写入一个字符串
FileRead读数据的方式有2种
A:方法public int read()
int ch = fr.read();
while(ch !=-1)
{ system.out.println(ch);
ch = fr.read();
}
开放中是, int ch =0;
while((ch=fr.read()) !=-1)
{system.out.println(ch);}
B:方法public int read(char[] chars)
//读取数据 定义数据
char[] chs = new char[1024];
int len = 0;
while((len=fr.read(chs)) !=-1){
String str=new String(chs,0,len);
}
(2) 字节流写数据InputStream
因InputStream是一个抽象类.所以用它的子类.FileInputStream
FileInputStream写数据的方式有3种
A:public void write(byte[] b)一次写入一个字节数组
B:public void write(byte[] b,int off,int len)一次写入一个字节数组的一部分
C:public abstract void write(int b)一次写一个字节
FileInputSream读数据的方式有2种:
方式1: public int read() 不能读带中文的(读出来的都是半个半个) 计算机底层都是值,数据
int ch = fr.read();
while(ch !=-1)
{ system.out.println(ch);
ch = fs.read();
}
开放中是, int ch =0;
while((ch=fs.read()) !=-1)
{system.out.println(ch);}
方式2:方法public int read(byte[] bytes)
//读取数据 定义数据
byte[] bytes = new bytes[1024];
int len = 0;
while((len=fs.read(chs)) !=-1){
String str=new String(bytes,0,len);
}
(3) BufferedWriter缓冲流:写入数据 缓冲区只提供缓冲功能,没有真正的读写
构造方法:
BufferedWriter( Writer out )使用给定大小的为什么传递的是Writer呢?
BufferedWriter 只提供数据的缓冲功能,真正的读写还有别人,使用FileWriter 最为参数传递
BufferedWriter( Writer out, int sz)使用给定大小的输出缓冲期
特殊功能: public void newLine() 可自动换行
基本流:能直接进行读写的流对象
高级流: 站在基本流的基础哈桑,提供一些特殊的功能,
BufferedReader读取数据
构造方法:
public BufferedReader(Reader in)创建一个使用默认大小输入缓冲区的缓冲字符输入流。
public BufferedReader(Reader in, int sz)创建一个使用指定大小输入缓冲区的缓冲字符输入流。
特殊功能:public String readLine()读取一个文本行。
// 创建字符缓冲流对象
BufferedReader br = new BufferedReader(new FileReader("c.txt"));
新的一种读取数据的方法
String line =null;
while((line= br.reanLine())!=null){
bw.writer(line)
bw.newLine();
}
(4)打印流概述
1、PrintStream: 字节打印流
2 PrintWriter:字符打印流
打印流特点:
A:可以写入任意类型的数据
B:可以自动刷新,但是必须先启动,并且是println,printf,format这些方法才有效。
C:可以直接对文件进行写入.
(5)标准的输入输出流
System类下的--System.in 标准的输入流
System.in---------InputStream
System类下的--System.out 标准的输出流
System.out----------PrintStream---------------OutputStream
理解:public static final InputStream in
其实就是一个类中的属性,数据类型InputStream,常量名in
注意:打印流只有写数据,没有读取数据
BufferedInputStream bis = new BufferedInputStream(new)
(6)转换流InputStreamReader和OutputStreamWriter的使用
转换流:就是一种字符流,只能实现字节流读写文本数据的时候,通过转换流来使用高效字符流的方法,而不能实现 音频,图片的读写
1、什么时候用到这个转换流呢?
当字节流想要用到字符流的特有功能,可以考虑使用转换流InputStreamReader它是字节流通向字符流
的桥梁
InputStreamReader 理解为字节流转换为字符流.使用上一样的.
OutputStreamWriter理解为字符流转换为字节流,但使用上还是字节流转换为字符流.
(7)序列化流概述和简单使用 Serializable
1、序列化:把对象按照流一样的方式进行传输或者存储
2、反序列化:把网络中的流数据或者文件中的流数据还原成对象。
3、什么时候使用:当对象需要通过流进行传输
4、当你需要序列化对象的时候需要告诉虚拟机这个对象要被序列化那么怎么告诉呢?
类通过实现Serializable接口,启用序列化功能
(该接口被称为序列化接口,它是一个标记接口,没有任何功能需要实现)
小知识:当你看到一个接口中没有任何需要实现的方法,这个时候不要奇怪,看一下接口的描述
这个接口一定是一个有特殊意义的接口