Java中转换流(InputStreamReader,OutputStreamWriter),打印流(PrintStream,PrintWriter)

转换流

InputStreamReaderOutputStreamWriter 是 Java 中用于字符流和字节流之间进行转换的转换流类。它们主要用于解决字符编码的问题,在字节流和字符流之间提供了桥梁,可以将字节流转换为字符流或将字符流转换为字节流。

  1. InputStreamReader
    InputStreamReader 是字节流到字符流的桥梁,它将字节输入流转换为字符输入流。它接受一个字节输入流作为构造参数,并指定字符编码(如UTF-8、GBK等)。通过读取字节并根据指定的编码转换为字符,可以使用 read() 方法来读取字符。

       public class InputStreamReader_ {public static void main(String[] args) throws IOException {String filePath = "d:\\InputStreamReader.txt";//解读//1. 把 FileInputStream 转成 InputStreamReader//2. 指定编码 gbk//InputStreamReader isr = new InputStreamReader(new FileInputStream(filePath), "gbk");//3. 把 InputStreamReader 传入 BufferedReader//BufferedReader br = new BufferedReader(isr);//将 2 和 3 合在一起BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), "utf-8"));//4. 读取String s = br.readLine();System.out.println("读取内容=" + s);//5. 关闭外层流br.close();}}
    
  2. OutputStreamWriter
    OutputStreamWriter 是字符流到字节流的桥梁,它将字符输出流转换为字节输出流。它接受一个字节输出流作为构造参数,并指定字符编码。通过将字符按照指定的编码转换为字节,并使用 write() 方法来写入字节。

     public class OutputStreamWriter_ {public static void main(String[] args) throws IOException {// 1.创建流对象OutputStreamWriter osw =new OutputStreamWriter(new FileOutputStream("d:\\OutputStreamWriter.txt"), "utf-8");// 2.写入osw.write("hello,世界");// 3.关闭osw.close();System.out.println("保存成功~");}}
    

这些转换流对于处理不同字符编码的数据非常有用,可以确保在读写过程中正确地将字节转换为字符,或者将字符转换为字节,避免了字符编码引起的问题。

打印流

在 Java 中,PrintStreamPrintWriter 是用于输出文本数据的类,它们提供了方便的方法来打印数据到不同类型的输出流。这两个类都实现了 Appendable 接口,允许你将各种数据类型转换为字符串并输出到流中。

  1. PrintStream
    PrintStream 是字节流的打印类,通常用于将文本数据输出到文件或控制台。它提供了多种 printprintln 方法,可以将各种数据类型打印为字符串并输出。System.out 就是一个 PrintStream 对象,用于控制台输出。
public class PrintStream_ {public static void main(String[] args) throws IOException {PrintStream out = System.out;//在默认情况下,PrintStream 输出数据的位置是 标准输出,即显示器/*public void print(String s) {if (s == null) {s = "null";}write(s);}*/out.print("john, hello");//因为 print 底层使用的是 write , 所以我们可以直接调用 write 进行打印/输出out.write("你好,世界".getBytes());out.close();//我们可以去修改打印流输出的位置/设备//1. 输出修改成到 "e:\\f1.txt"//2. "hello, 韩顺平教育~" 就会输出到 e:\f1.txt//3. public static void setOut(PrintStream out) {// checkIO();// setOut0(out); // native 方法,修改了 out// }System.setOut(new PrintStream("d:\\printStream.txt"));System.out.println("hello,world");}
}
  1. PrintWriter
    PrintWriter 是字符流的打印类,用于将文本数据输出到文件或其他字符流。与 PrintStream 类似,它也提供了多种 printprintln 方法,用于打印各种数据类型。
public class printWriter {public static void main(String[] args) throws IOException {//PrintWriter printWriter = new PrintWriter(System.out);//默认是显示器PrintWriter printWriter = new PrintWriter(new FileWriter("d:\\printWriter.txt"));printWriter.print("hi, 北京你好~~~~");printWriter.close();//flush + 关闭流, 才会将数据写入到文件..}
}

这两个类提供了一种方便的方式来输出数据,尤其适用于格式化输出文本数据。选择使用哪个类取决于你要输出的数据类型(字节流或字符流),以及你的具体需求。如果需要将数据写入二进制文件,通常会使用 PrintStream。如果需要输出文本文件,特别是需要进行字符编码操作,通常会使用 PrintWriter

printStream关系图:
在这里插入图片描述

printWriter关系图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/91739.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度探索JavaScript中的原型链机制

🏆作者简介,黑夜开发者,全栈领域新星创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责…

在使用Vant组件库时,实现下拉刷新,只有在列表顶部才会刷新

场景 官方代码,是只要下拉就会刷新,但这并不是我们想要的,我们想要实现下拉刷新,只有在列表顶部才会刷新 解决 全局样式 .van-pull-refresh {height: calc(100vh - 100px) !important;overflow: auto !important; }结语 感谢…

电脑提示缺少d3dx9_43.dll的问题及5个解决方法

大家好!今天,我将和大家分享一个电脑提示缺少d3dx9_43.dll的问题及其解决方法。这个问题可能会影响到我们在使用电脑时的一些功能,所以掌握这个解决方法对我们来说是非常有帮助的。 首先,我们来了解一下什么是d3dx9_43.dll。d3dx9…

Visual Studio软件_MSC_VER值(MSVC编译器版本)的获取方法

本文介绍查看Visual Studio软件_MSC_VER值的方法。 _MSC_VER是微软公司推出的C/C 编译器——MSVC编译器的一个内置宏,其值表示当前Visual Studio软件中MSVC编译器的具体版本。不同的Visual Studio软件版本对应着不同的MSVC编译器版本——无论是不同发布年份的版本&…

【iOS】Masonry的基本使用

文章目录 前言一、使用Masonry的原因二、约束的常识三、Masonry的简单使用四、Masonry的用例总结 前言 暑假安装了cocoapods,简单使用其调用了SVGKit,但是没有学习Masonry,特此总结博客记录Masonry的学习 一、使用Masonry的原因 Masonry是一…

泡泡玛特回应头部IP营收增速放缓:IP上市时间不固定

8月23日,针对今年上半年头部IP营收增速放缓问题,泡泡玛特(09992.HK)管理层在业绩会上解释称,每个IP上市时间并不固定,单从上半年看同比增长会有偏差,而随着下半年两个新系列的推出,全…

算法 -汉诺塔,哈夫曼编码

有三个柱子,分别为 from、buffer、to。需要将 from 上的圆盘全部移动到 to 上,并且要保证小圆盘始终在大圆盘上。 这是一个经典的递归问题,分为三步求解: ① 将 n-1 个圆盘从 from -> buffer ② 将 1 个圆盘从 from -> to ③ 将 n-1 个圆盘从 buffer -> to 如果…

R语言图形的组合( par(),layout(),par(fig()) )

引入d.class进行画图 > d.class<-read.csv("D://class.csv",header T) > attach(d.class) > opar<-par(no.readonly TRUE)非常简单的数据&#xff0c;需要可自取 链接&#xff1a;https://pan.baidu.com/s/1zNx5z9JsaaRqFueRgGY3mQ 提取码&#x…

雅思写作 三小时浓缩学习顾家北 笔记总结(二)

目录 饥饿网一百句翻译 Using government funds for pollution cleanup work can create a comfortable environment. "Allocating government funds to pollution cleanup work can contribute to the creation of a comfortable environment." Some advertise…

iPhone 15 Pro与iPhone 13 Pro:最大的预期升级

如果你在2021年首次发布iPhone 13 Pro时就抢到了它,那么你的合同很可能即将到期。虽然距离iPhone 15系列还有几周的时间,但你可能已经在想:是时候把你的旧iPhone升级为iPhone 15 Pro了吗? 我们认为iPhone 13 Pro是你现在能买到的最好的手机之一。但如果你想在2023年晚些时…

有点意思的 Java 递归调用

最近在刷一些问题的时候看到有下面一个问题 上面问的是当输入的字符串为什么的时候返回 True 总结 在做题目的时候&#xff0c;第一次还做错了。 这是因为解答这个题目的时间只有 3 分钟&#xff0c;没有自己看题目 后来拿着程序跑了下。 public void testGetPut() throws …

idea使用maven时的java.lang.IllegalArgumentException: Malformed \uxxxx encoding问题解决

idea使用maven时的java.lang.IllegalArgumentException: Malformed \uxxxx encoding问题解决 欢迎使用Markdown编辑器1、使用maven clean install -X会提示报错日志2、在Poperties.java文件的这一行打上断点3、maven debug进行调试4、运行到断点位置后&#xff0c;查看报错char…