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

news2024/11/17 5:30:39

转换流

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.coloradmin.cn/o/956891.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

提高Python并发性能 - asyncio/aiohttp介绍

在进行大规模数据采集时,如何提高Python爬虫的并发性能是一个关键问题。本文将向您介绍使用asyncio和aiohttp库实现异步网络请求的方法,并通过具体结果和结论展示它们对于优化爬虫效率所带来的效果。 1. 什么是异步编程? 异步编程是一种非阻…

实战教学:农产品小程序商城的搭建与运营

随着移动设备的普及和互联网技术的发展,小程序商城已经成为农产品销售的一种新兴渠道。本文将以乔拓云网为平台,详细介绍如何搭建和运营农产品小程序商城。 步骤一:登录乔拓云网后台 首先,进入乔拓云网站后台,找到并点…

Centos7 使用docker安装oracle数据库(超详细)

在linux中采用解压安装包的方式安装oracle非常麻烦,并且稍微不注意就会出现问题,因此采用docker来安装,下面为详细的步骤: 若不知道是否安装docker可查看这篇文章:docker安装 1、拉取oracle镜像 docker pull registr…

计算机网络 | TCP 三次握手四次挥手 |半关闭连接

本来是不愿意写的,可是在实际场景,对具体的描述标志还是模糊不清,基础不扎实,就得承认!!! TCP 连接建立需要解决三大问题: 知道双方存在约定一些参数,如最大滑动窗口值、…

YOLOv5算法改进(10)— 替换主干网络之GhostNet

前言:Hello大家好,我是小哥谈。GhostNet是一种针对计算机视觉任务的深度神经网络架构,它于2020年由中国科学院大学的研究人员提出。GhostNet的设计目标是在保持高精度的同时,减少模型的计算和存储成本。GhostNet通过引入Ghost模块…

浅谈多人游戏原理和简单实现。

😜作 者:是江迪呀✒️本文关键词:websocket、网络、原理、多人游戏☀️每日 一言:这世上有两种东西无法直视,一是太阳,二是人心! 一、我的游戏史 我最开始接触游戏要从一盘300游戏…

RSA算法与错误敏感攻击

参见《RSA 算法的错误敏感攻击研究与实践》 RSA 算法简介 RSA 算法原理: 1) RSA 算法密钥产生过程 (1)系统随机产生两个大素数 p p p 和 q q q,对这两个数据保密; (2)计算 n p …

Java类的声明周期、对象的创建过程

一、类的生命周期 使用类时,要先使用类加载器将类的字节码从磁盘加载到内存的方法区中,用Class对象表示加载到内存中的类,Class类是JDK中提供的类创建对象时,是根据内存中的Class对象,在堆中分配内存,完成…

c语言之指针的学习

1.指针是什么 (指针是内存中一个最小单元的编号,也就是地址) int main() {int a10;//当我们取出地址a的时候,取出的其实是a占4个字节中的第一个字节的地址int *pa&a;//pa是一个指针变量,用于存放地址//pa在口头语上常说为指针//指针本质上就是地址,…

C++学习|CUFFT计算一维傅里叶变换

CUFFT计算一维傅里叶变换 CUFFT库介绍CUFFTW计算一维傅里叶变换CUFFT计算一维傅里叶变换 前言:之前实现了CPU运行一维傅里叶变换,最近要改成GPU加速一维傅里叶变换,于是有了此篇作为记录,方便以后查阅。 CUFFT库介绍 CUFFT&#…

Protein - ECD (ExtraCellular Domain) 膜蛋白胞外区的 UniProt 与 PDB 数据分析

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/132597158 ECD 是 Extracellular Domain 的缩写,指的是跨膜蛋白质的细胞外部分 (膜蛋白的胞外区),通常包含一些功能性的结…

JVM的故事——类文件结构

类文件结构 文章目录 类文件结构一、概述二、无关性基石三、Class类文件的结构 一、概述 计算机是只认由0、1组成的二进制码的,不过随着发展,我们编写的程序可以被编译成与指令集无关、平台中立的一种格式。 二、无关性基石 对于不同平台和不同平台的…

77GHz线性调频连续波雷达

文章目录 前言 一、背景 二、优缺点 三、工作原理 四、电路模块设计 4.1.LFMCW信号源 4.2.发射电路 4.3.接收电路 4.4.信号处理器 五、应用 5.1.汽车测距 5.2.军事方面 5.3.气象方面 总结 前言 这篇文章是博主本科期间整理的关于77GHz线性调频连续波雷达的相关资料,…

【Java】文件操作和IO

文件操作和IO 文件树形结构组织和目录文件路径 Java中操作文件File 文件内容的读写(数据流)Reader和Writer字符输入流 Reader字符输出流 WriterFileReader 和 FileWriterFileReaderFileWriter InputStream和OutputStreamInputStreamFileInputStreamFileOutputStream 小程序扫描…

Vue3实现24小时倒计时

方法一:时间戳(24小时以内,毫秒为单位)转成时间,并且倒计时 效果预览: <script> // 剩余时间的时间戳,24小时的时间戳是86400000 const exTime = ref(86400000) // 支付时间期限 const payTime = ref() const maxtime = ref(0) //倒计时(时间戳,毫秒单位)转换成秒…

java 工程管理系统源码+项目说明+功能描述+前后端分离 + 二次开发

​ ​工程项目管理系统是指从事工程项目管理的企业&#xff08;以下简称工程项目管理企业&#xff09;受业主委托&#xff0c;按照合同约定&#xff0c;代表业主对工程项目的组织实施进行全过程或若干阶段的管理和服务。 如今建筑行业竞争激烈&#xff0c;内卷严重&#xff0c…

OPENCV实现ORB特征检测

# -*- coding:utf-8 -*- """ 作者:794919561 日期:2023/8/31 """ import cv2 import numpy as np# 读图像 img = cv2.imread(F:\\learnOpenCV\\openCVLearning\\pictures\\chess.jpg)

应急日光灯 补光灯 太阳能路灯 升压LED电源驱动恒流IC

产品说明 AP9196 是一系列外围电路简洁的宽调光比升压调光 恒流驱动器&#xff0c;适用于 3-40V 输入电压范围的 LED 照明领域。 AP9196 采用我司专利算法&#xff0c;可以实现高精度的恒流 效果&#xff0c;输出电流恒流精度≤3&#xff05;&#xff0c;电压工作范围为 5-40V&…

重庆市人才系统注册流程

1、IE浏览器打开重庆市科技局官网首页(http://kjj.cq.gov.cn/) 2、选择“重庆市科技管理信息系统”—选择“科技资源共享”—板块—注册—选择“个人注册”—填写注册信息—注册 3、注册—选择“个人注册”—填写注册信息—注册—登录 4、选择“科技管理系统“ 5、选择“科技人…

Linux进程概念及其状态

文章目录 &#x1f347;1. 什么是进程&#x1f348;1.1 概念&#x1f348;1.2 理解进程 &#x1f34b;2. Linux的PCB&#x1f34e;3. 查看进程 & 杀死进程&#x1f352;4. 系统调用获取进程标识符&#x1f353;4.1 进程PID&#x1f353;4.2 父进程PPID &#x1f346;5. 系统…