流按着数据的传输方向分为:
-输入流:往内存中读叫输入流。
-输出流:从内存中往外写叫输出流。
所有输入流都是InputStream类或者Reader类的子类。
-类名以InputStream结尾的类都是InputStream的子类。
-类名以Reader结尾的类都是Reader类的子类。
所有输出流都是OutputStream类或者Writer类的子类。
-类名以OutputStream结尾的类都是OutputStream的子类。
-类名以Writer结尾的类都是Writer类的子类。
数据流编码格式上划分
从数据流编码格式上划分为:
-字节流
-字符流
InputStream和OutputStream的子类都是字节流。
-可以读写二进制文件,主要处理音频、图片、歌曲、字节流处理单元为1个字节。
Reader和Writer的子类都是字符流。
-主要处理字符或字符串,字符流处理单元为2个字节。
-字节流将读取到的字节数据,去指定的编码表中获取对应文字。
字节流中常用类
-字节输入流 FileInputStream
-字节输出流 FileOutputStream
字符流中常用类
-字符输入流 FileReader
-字符输出流 FileWriter
字节输入流
public static void show3() throws IOException{
System.out.println("方法三");
File file=new File("a.txt");
FileInputStream input=new FileInputStream(file);
FileOutputStream output=new FileOutputStream("b.txt");
byte [] bys=new byte[1024*1024];//1M 每次读取1M
int read=input.read(bys);
while(read!=-1){
//写入字节
output.write(bys,0,read); //正好结束 read会自动增加的
//读取下一个字节码
read=input.read();
}
System.out.println("保存成功");
}
public static void show2() throws IOException{
System.out.println("方法二");
File file=new File("a.txt");
FileInputStream input=new FileInputStream(file);
FileOutputStream output=new FileOutputStream("b.txt");
byte [] bys=new byte[1024*1024];//1M 每次读取1M
int read=input.read(bys);
while(read!=-1){
System.out.println(read);
//写入字节
output.write(read); //每次写1M 最后会增大写入文件的内存 因为每次都增加1M
//读取下一个字节码
read=input.read();
}
System.out.println("保存成功");
}
字符输入流
writer.flush(); 刷新缓存区 不刷新就显示不出数据
writer.close(); //close方法默认调用flush方法 先刷新后调用
public static void main(String[] args) throws IOException {
FileReader reader=new FileReader("a.txt");
FileWriter writer=new FileWriter("aa.txt");
System.out.println("方法一");
/*int read =reader.read();
while(read!=-1){
writer.write(read);
read=reader.read();
}
writer.flush(); 刷新缓存区 不刷新就显示不出数据
*/
System.out.println("方法二");
char cs[] =new char[10];
int read =reader.read(cs);
while(read!=-1){
writer.write(cs,0,read);
read=reader.read();
}
writer.close(); //close方法默认调用flush方法 先刷新后调用
}
节点流与处理流
根据封装类型不同流又分为:
-节点流
-处理流
节点流:
如果流封装的是某种特定的数据源,如文件、字符串、字符串数组等,则称为节点流。
处理流。
如果流封装的是其它流对象,称为处理流。处理流提供了缓冲功能,提高读写效率。
节点流中常用类
字节输入流 FileInputStream
-字节输出流 FileOutputStream
-字符输入流 FileReader
-字符输出流 FileWriter
处理流中常用类
缓冲字节输出流 BufferedOutputStream
-缓冲字节输入流 BufferedInputStream
-缓冲字符输入流 BufferedReader
-缓冲字符输出流 BufferedWriter
缓冲区原理:
-缓冲区的概念。
-缓冲区的作用:要对操作的数据进行临时的缓存,提高了读写效率。
-缓冲区如何提高读写效率。
处理流的特点:
-字符缓冲输入流提供了读取一行的方法readLine() 。
-字符缓冲输出流提供了写入一个空行的方法newLine()。
-字符缓冲输出流,把写入的数据先写入到内存,在使用flush()方法将内存数据刷到硬盘上。
注意:在使用字符输出流时,一定先flush(),然后在close(),避免数据的丢失。
// 序列化 将对象序列化到内容中
public static void output(ArrayList<Students> list ) throws Exception{
ObjectOutputStream objectoutputStream= new ObjectOutputStream(new FileOutputStream("Student.txt"));
objectoutputStream.writeObject(list);
}
// 读取内容
public static void input(ArrayList<Students> list) throws Exception{
ObjectInputStream objectinputStream= new ObjectInputStream(new FileInputStream("Student.txt"));
Object readObeject =objectinputStream.readObject();
System.out.println(readObeject);
}