InputStreamReader和OutputStreamWriter 的区别和用法简介
发布日期:2022-02-01 14:28:20
浏览次数:32
分类:技术文章
本文共 3751 字,大约阅读时间需要 12 分钟。
一.InputStreamReader
InputStreamReader 将字节流转换为字符流。是字节流通向字符流的桥梁。如果不指定字符集编码,该解码过程将使用平台默认的字符编码,如:GBK。
构造方法:InputStreamReader isr = new InputStreamReader(InputStream in); //构造默认编码的类InputStreamReader isr = new InputStreamReader(InputStream in,String charsetName);//构造一个指定编码集的InputStreamReader类。 参数 in对象通过 InputStream in = System.in;获得。//读取键盘上的数据。 也可以通过传入FileinputStream对象来创建,例如: InputStreamReader isr = new InputStreamReader(new FileinputStream("d:xxx.txt",true),此处可指定编码“ )
代码 实例:
public class InputStreamReaderDemo { public static void main(String[] args) throws IOException { //1.实例化File的对象 //File file = new File("file/input1.txt"); //2.实例化转换输入流的对象 //注意:当一个流的存在的意义是为了实例化另外一个流,则这个流不需要手动进行关闭 //InputStreamReader reader = new InputStreamReader(new FileInputStream(file)); //使用默认的字符集进行实例化转换流 上面也可简写成下面这行代码 //InputStreamReader reader = new InputStreamReader(new FileInputStream("file/input1.txt")); //使用指定字符集进行实例化转换流 //字符集一般使用字符串直接传参,不区分大小写,但是,如果字符集书写有误的话,则会跑出java.io.UnsupportedEncodingException InputStreamReader reader = new InputStreamReader(new FileInputStream(new File("file/input1.txt")),"UTF-8"); //3.1不带缓冲区读取 char[] arr = new char[16]; int len = 0; while((len = reader.read(arr)) != -1) { String string = new String(arr, 0, len); System.out.print(string);//这里最好不加换行,因为当缓冲区数组满的时候就会打印,而这时缓冲区数组读到的文档位置不一定换行,所以不添加换行,让其读到文件换行时候自动换行即可 //3.2 带缓冲区读取使用缓冲区 可以使用缓冲区对象的 read() 和 readLine()方法。 */ //读取字节流 FileInputStream fis = new FileInputStream("file/input1.txt");//读取文件上的数据。 //将字节流向字符流的转换。 InputStreamReader isr = new InputStreamReader(fis);//读取 //上面的两步代码可以一步到位 InputStreamReader isr = new InputStreamReader(new FileInputStream("file/input1.txt")) //创建字符流缓冲区 BufferedReader bufr = new BufferedReader(isr);//缓冲 BufferedReader bufr = new BufferedReader(new InputStreamReader(new FileInputStream("D:\\demo.txt")));以上代码都可以综合到这一句。 String line = null; while((line = bufr.readLine())!=null){ System.out.println(line); } reader.close(); }}
二.OutputStreamWriter
OutputStreamWriter 将字符流转换为字节流。(这里注意是将字符流)是字符流通向字节流的桥梁。如果不指定字符集编码,该解码过程将使用平台默认的字符编码
构造方法:OutputStreamWriter osw = new OutputStreamWriter(OutputStream out);//构造一个默认编码集的OutputStreamWriter类 OutputStreamWriter osw = new OutputStreamWriter(OutputStream out,String charsetName);//构造一个指定编码集的OutputStreamWriter类。 参数 out对象通过 OutputStream out = System.out;获得。//打印到控制台上。 或者是简洁点的 OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("xxx.txt"));将内容写入到指定文件主要方法: void write(int c);//将单个字符写入。 viod write(String str,int off,int len);//将字符串某部分写入。 void flush();//将该流中的缓冲数据刷到目的地中去。
以上构造方法 原文链接:
OutputStreamWriter流对象,它到底如何把字符转成字节输出的呢?
其实在OutputStreamWriter流中维护自己的高效区,当我们调用OutputStreamWriter对象的write方法时,会拿着字符到指定的码表中进行查询,把查到的字符编码值转成字节数存放到OutputStreamWriter高效区中。然后再调用刷新功能,或者关闭流,或者高效区存满后会把高效区中的字节数据使用字节流写到指定的文件中。
代码实现:
public class OutputStreamWriterDemo { public static void main(String[] args) throws IOException { //1.实例化FIle对象 //注意:对于所有的输出流而言,文件可以不存在,在进行写入的过程中可以自动进行创建 //但是,对于所有的输入流而言,文件必须先存在,然后才能操作,否则,会抛出FileNotFounedException File file = new File("file/output1.txt"); //2.实例化转换输出流 //如果不想覆盖源文件中的内容时,则在传参的时候,设置一个参数为true代表可以追加 OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(file,true), "utf-8"); //3.1不带缓冲区的写入 writer.write("家客户放假啊刚回家"); //4.刷新 writer.flush(); //5.关闭 writer.close();//3.2带缓冲区的写入 FileOutputStream fos = new FileOutputStream("D:\\demo.txt");//打印到文件。 OutputStreamWriter osr = new OutputStreamWriter(fos);//输出// OutputStreamWriter osr = new OutputStreamWriter(new FileOutputStream("D:\\demo.txt"));//综合到一句。 BufferedWriter buf = new BufferedWriter(osr);//缓冲 String str = "我爱中国"; buf.write(str); buf.flush(); buf.close(); }}
转载地址:https://blog.csdn.net/shunshizhen120412/article/details/98984883 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月28日 03时39分10秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
2纳米芯片问世!芯片性能要起飞?!
2019-04-29
ARM Cortex系列那么多处理器,该怎么区分?
2019-04-29
知乎:学计算机的女生都怎么样了?
2019-04-29
华为重磅反击,鸿蒙来了!
2019-04-29
常用电子接口大全,遇到不认识的,就翻出来对照辨认!
2019-04-29
芯片IC附近为啥要放0.1uF的电容?
2019-04-29
电赛 | 19年全国一等奖,北航学子回忆录。
2019-04-29
电赛 | 19年全国一等奖,北航学子回忆录(上)
2019-04-29
电赛 | 19年全国一等奖,北航学子回忆录(下)
2019-04-29
突破!台积电1nm芯片,有了新进展。
2019-04-29
一文读懂全系列树莓派!
2019-04-29
自制一个害羞的口罩,见人就闭嘴,戴着可以喝奶茶
2019-04-29
聊聊我是如何编程入门的
2019-04-29
J-Link该如何升级固件?
2019-04-29
从电子垃圾中提炼黄金,可以!!!
2019-04-29
知乎大神深入解析:单片机晶振脚原理是什么?
2019-04-29
电容有17种?看看详细介绍!
2019-04-29
如何准备电赛?19年电赛经验总结!
2019-04-29
蓝牙:为啥叫“蓝”牙,不叫“白”牙?
2019-04-29
干货 | 如何系统学习 C 语言?
2019-04-29