Java I/O中字符流和字节流的区别

字节流与和字符流的使用非常相似,但实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件。

1、使用字节流不关闭执行

import java.io.File;    

import java.io.FileOutputStream;    

import java.io.OutputStream;    

public class OutputStreamDemo05 {    

public static void main(String[] args) throws Exception {   // 异常抛出,  不处理    

// 第1步:使用File类找到一个文件    

     File f = new File("d:" + File.separator + "test.txt"); // 声明File  对象    

// 第2步:通过子类实例化父类对象    

     OutputStream out = null;            

// 准备好一个输出的对象    

     out = new FileOutputStream(f);      

// 通过对象多态性进行实例化    

// 第3步:进行写操作    

     String str = "Hello World!!!";      

// 准备一个字符串    

     byte b[] = str.getBytes();          

// 字符串转byte数组    

     out.write(b);                      

// 将内容输出    

 // 第4步:关闭输出流    

    // out.close();                  

// 此时没有关闭    

        }    

    }

打开文件会发现,此时没有关闭字节流操作,但是文件中也依然存在了输出的内容,证明字节流是直接操作文件本身的。而下面继续使用字符流完成,再观察效果。


2、使用字符流不关闭执行

package org.lxh.demo12.chariodemo;    

    import java.io.File;    

    import java.io.FileWriter;    

    import java.io.Writer;    

    public class WriterDemo03 {    

        public static void main(String[] args) throws Exception { // 异常抛出,  不处理    

            // 第1步:使用File类找到一个文件    

            File f = new File("d:" + File.separator + "test.txt");// 声明File 对象    

            // 第2步:通过子类实例化父类对象    

            Writer out = null;                 

    // 准备好一个输出的对象    

            out = new FileWriter(f);            

    // 通过对象多态性进行实例化    

            // 第3步:进行写操作    

            String str = "Hello World!!!";      

    // 准备一个字符串    

            out.write(str);                    

    // 将内容输出    

            // 第4步:关闭输出流    

            // out.close();                   

    // 此时没有关闭    

        }    

    }

    

程序运行后会发现文件中没有任何内容,这是因为字符流操作时使用了缓冲区,而在关闭字符流时会强制性地将缓冲区中的内容进行输出,但是如果程序没有关闭,则缓冲区中的内容是无法输出的,所以得出结论:字符流使用了缓冲区,而字节流没有使用缓冲区。

如果想在不关闭时也可以将字符流的内容全部输出,则可以使用Writer类中的flush()方法完成。

import java.io.File;    

import java.io.FileWriter;    

import java.io.Writer;    

public class WriterDemo04 {    

    public static void main(String[] args) throws Exception { // 异常抛出不处理    

        // 第1步:使用File类找到一个文件    

        File f = new File("d:" + File.separator + "test.txt");// 声明File    

对象    

        // 第2步:通过子类实例化父类对象    

        Writer out = null;                   

// 准备好一个输出的对象    

        out = new FileWriter(f);             

// 通过对象多态性进行实例化    

        // 第3步:进行写操作    

        String str = "Hello World!!!";      

// 准备一个字符串    

        out.write(str);                    

// 将内容输出    

        out.flush();                       

// 强制性清空缓冲区中的内容    

        // 第4步:关闭输出流    

        // out.close();                

// 此时没有关闭    

    }    

}


此时,文件中已经存在了内容,更进一步证明内容是保存在缓冲区的。这一点在读者日后的开发中要特别引起注意。


转载于:https://my.oschina.net/u/2277088/blog/513951

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值