Java 之缓冲流,转换流,序列化流,打印流

 字节输入输出 缓冲流             字符输入输出 缓冲流            转换流           序列化流                      打印流

字节输入输出 缓冲流

1.BufferedOutputStream( OutputStream out, int size  )          size可选,设置一次读取大小 1024整数

    底层创建一个数组一次读取多个 以达到缓冲的作用, 类似前面字节输入流 的 read( byte [ ] )  传入数组 加快读取速度

 2.  BufferedInputStream(InputStream in, int size)

        public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("img.jpg");
        BufferedInputStream bis = new BufferedInputStream(fis);
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("wode.jpg"));
        int num;
        byte[] bytes = new byte[1024];
        while ((num=bis.read(bytes))!=-1){
            bos.write(bytes,0,num);
        }}

字符输入输出 缓冲流

     1.BufferedWriter( )       BufferedReader(  )      包装字符输出输入流   

       字符输出流多了一个方法   newLine()          写一个换行,支持所有系统

       字符输入流多了一个方法   readLine()         读取一行 不包括\n\r\t 这些作为一行标志 ,  但结束标志是null

        BufferedWriter bdw = new BufferedWriter(new FileWriter("我的小作文.txt"));
        for (int i = 0; i < 5; i++) {
            bdw.write("我我我我冲啊冲啊");
            bdw.newLine();
        }
        bdw.close();
        BufferedReader br = new BufferedReader(new FileReader("我的小作文.txt"));
        char[] chars = new char[1024];
        int num ;
        while ((num=br.read(chars))!=-1){
            System.out.println(new String(chars,0,num));
        }
         特有方法一行一行的读取
        String line;
        while ((line=br.readLine())!=null){
            System.out.println(line);
        }

转换流

  1.针对 字节输入流 与字节输出流

        设置写入编码
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("我是gbk.txt"),"gbk");
        osw.write("你好啊");
        osw.close();
        设置读取编码
        InputStreamReader isr = new InputStreamReader(new FileInputStream("我是gbk.txt"),"gbk");
        char[] chars = new char[1024];
        int num;
        while ((num=isr.read(chars))!=-1) {
            System.out.println(chars);
        }

序列化流

    1.针对对象     把对象写入文件称为 序列化  从文件读取对象 ,称为 反序列化

    2. 使用ObjectOutputStream对象中的方法writeObject,把对象写入到文件中

    3.使用ObjectInputStream对象中的方法readObject读取保存对象的文件

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("10_IO\\person.txt"));
oos.writeObject(new Person("小美女",18));

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("10_IO\\person.txt"));
Object o = ois.readObject();      
System.out.println(o);
Person p = (Person)o;    强转为Person对象
System.out.println(p.getName()+p.getAge());

   4.Person对象要求

         1.必须实现Serializable 接口  就是一个标志,才能被序列化

         2.serialVersionUID   用于对象标志特有标志手动设置, 数值任意   用于修改类对象时,还能被反序列化

public class Person implements Serializable{
    private static final long serialVersionUID = 1L;
    private String name;
    public int age;

   ...重写toString  get,set 两个构造方法省略
}

打印流

     1java.io.PrintStream  extends OutputStream:  打印流

     2.构造方法:

        1.PrintStream(String fileName) :     输出的目的地是一个文件路径    println 或print 原样打印所有 内容

        PrintStream ps = new PrintStream("10_IO\\print.txt");
        ps.write(97);       调用write 文件内容是a
        ps.println(97);
        ps.println(8.8);
        ps.println('a');
        ps.println("HelloWorld");
        ps.println(true);
        ps.close();

        2.PrintStream(OutputStream out):  输出的目的地是一个字节输出流

        3.PrintStream(File file):                   输出的目的地是一个文件

PrintStream ps = new PrintStream(new FileOutputStream("print.txt"));
PrintStream ps2 = new PrintStream(new File("print.txt"));
ps.println("哈哈");
ps2.print(true)

    4. System 设置输出位置

        System.out.println("我是在控制台输出");
        PrintStream ps = new PrintStream("10_IO\\目的地是打印流.txt");
        System.setOut(ps);        //把输出语句的目的地改变为打印流的目的地
        System.out.println("我在打印流的目的地中输出");
        ps.close();

     

      

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值