流(二)

《缓冲流》

缓冲流要“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率,同时增加了一些新的方法

 缓冲输入流支持其父类的mark和reset方法

BufferedReader提供了readLine方法用于读取一行字符串(以\r,\n分隔)

bufferedWriter提供了newLine用于写入一个行分隔符

对于输出的缓冲流,写出的数据会先在内存中缓存,使用flush方法会将内存中的数据立刻写出

import java.io.*;
public class TestBufferSteam1 {
	public static void main(String[] args) {
		try {
			FileInputStream fis = new FileInputStream("d:/HelloWorld.java");
			BufferedInputStream bis = new BufferedInputStream(fis);
			int c=0;
			System.out.println((char)bis.read());
			System.out.println((char)bis.read());
			bis.mark(10);
			for(int i=0;i<=10 && (c=bis.read())!=-1;i++){
		        System.out.print((char)c+" ");
			}
			System.out.println();
			bis.reset();  //又回到mark的地方
			for(int i=0;i<=10 && (c=bis.read())!=-1;i++){
		        System.out.print((char)c+" ");
			}
			bis.close();
		}catch( IOException e) {
			e.printStackTrace();
		}
	}

}

--------imooc---------

FileOutputStream--->write()方法相当于一滴一滴把水转移过去

DataOutputStream----->writeXxx()方法会方便一些,相当于一瓢一瓢把水转移过去

BufferedOutputStream----->write方法更方便,相当于一瓢一瓢先放入桶中,再从桶中导入另一个缸中,性能提高了

import java.io.*;

public class BufferDemo {
    public static void main(String args[]) throws IOException {

        BufferDemo bd = new BufferDemo();
        bd.copyFileByBuffer(new File("D:\\HW.java"),new File("D:\\HW.txt"));


    }
    public  void copyFileByBuffer(File srcFile,File destFile) throws IOException{
        if(!srcFile.exists()){
            throw new IllegalAccessError("文件不存在");
        }
        if(!srcFile.isFile()){
            throw new IllegalAccessError("不是文件");
        }
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));
        int c;
        while((c = bis.read())!=-1){
            bos.write(c);
            bos.flush();//刷新缓冲区
        }
        bis.close();
        bos.close();
    }


}

《字符流的补充mooc》

1)编码问题

2)认识文本和文本文件

Java的文本(char)是16为无符号整数,是字符的Unicode编码(双字节)

文件是 byte byte。。。的数据序列

文本文件是文本(char)序列按照编码方案(utf-8,utf-16be,gbk)序列化为byte的存储结构

3)字符流(Reader Writer)

字符的处理,一次处理一个字符

字符的底层任然是基本的字节序列

字符流的基本实现

InputStreamReader 完成byte流解析为char流,按照编码解析

OutputStreamWriter 提供char流到byte流,按照编码处理

FileReader/FileWriter

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class FrAndFwDemo {
    public static void main(String[] args) throws IOException{
        FileReader fr = new FileReader("d:\\HW.java");
        FileWriter fw = new FileWriter("d:\\HW.txt",true);
        char[] buffer = new char[2056];
        int c;
        while((c = fr.read(buffer,0,buffer.length))!=-1){
            fw.write(buffer,0,c);
            fw.flush();
        }
        fr.close();
        fw.close();
    }
}

字符流的过滤器

BufferedReader  ---->readline 一次读一行

BufferedWriter ---->一次写一行。

《对象序列化,反序列化??》

1)对象序列化,就是将object转换成byte序列,反之叫对象反序列化

2)序列化流(ObjectOutputStream),是过滤流-----writeObj

反序列化流(ObjectInputStream)-----readObject

3) 序列化接口(Serializable)

对象必须实现序列化接口,才能进行序列化,否则出现异常

这个接口,没有任何方法,只是一个接口

transient; //该元素不会进行jvm默认的序列化

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值