Java转换流(InputStreamReader/OutputStreamWriter)

article/2025/9/21 9:26:15

在这里插入图片描述

文章目录

  • 概述
  • 为什么会有转换流?
  • InputStreamReader
  • OutputStreamWriter

概述

转换流是字节流到字符流的桥梁,在转换的过程中,可以指定编码。转换流也是一种处理流,它提供了字节流和字符流之间的转换。

在这里插入图片描述
转换流的两个类

  • InputStreamReader
  • OutputStreamWriter

为什么会有转换流?

众所周知,计算机中存储的数据都是二进制的数字,我们在电脑屏幕上看到的文字信息是将二进制转换之后显示的,两者之间存在编码与解码的过程,其互相转换必须遵循某种规则,即编码和解码都遵循同一种规则才能将文字信息正常显示,如果编码跟解码使用了不同的规则,就会出现乱码的情况。

在默认情况下,是按照UTF-8编码格式进行操作的

当我们将代码中的文件编码格式切换成其他编码格式,再次执行的时候就会出现乱码

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;public class CodeQuestion {public static void main(String[] args) {//读取E盘下a.txt文件String filePath = "E:\\a.txt";BufferedReader bufferedReader = null;try {bufferedReader = new BufferedReader(new FileReader(filePath));String file = bufferedReader.readLine();System.out.println(file);} catch (IOException e) {e.printStackTrace();} finally {try {bufferedReader.close();} catch (IOException e) {e.printStackTrace();}}}
}

文件中内容:hello你好
控制台输出:hello���

而转换流可以指定文件的编码方式,从而解决问题

InputStreamReader

InputStreamReader:Reader的子类,将字节输入流转换为字符输入流。是字节流通向字符流的桥梁。如果不指定字符集编码,该解码过程将使用平台默认的字符编码,如:GBK。
在这里插入图片描述

该类提供了4个构造方法,根据不同的场景进行选择操作

在这里插入图片描述

  • InputStream:表示字节输入流
  • charset:表示编码方式

传入一个InputStream对象,而且可以指定处理的编码方式

示例

字节流FileInputStream包装成(转换流)字符流InputStreamReader,对文件进行读取(按照UTF-8格式),进而包装成BufferedReader
读取E盘下的文件(read方法)

import java.io.*;public class InputStreamReader_ {public static void main(String[] args) {String filePath = "E:\\a.txt";BufferedReader bufferedReader = null;try {InputStreamReader gbk = new InputStreamReader(new FileInputStream(filePath), "GBK");bufferedReader = new BufferedReader(gbk);//下面为第二种写法,通常使用第二种//bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(filePath),"GBK"));String s;while ((s = bufferedReader.readLine()) != null) {System.out.println(s);}} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {bufferedReader.close();//关闭外层流即可} catch (IOException e) {e.printStackTrace();}}}
}

此时文件本体的编码为ANSI,所以如果不按照GBK编码方式进行读取,则采用默认编码方式,会产生乱码

OutputStreamWriter

OutputStreamWriter:Writer的子类,将字节输出流转换为字符输出流。是字符流通向字节流的桥梁。如果不指定字符集编码,该解码过程将使用平台默认的字符编码,如:GBK。

在这里插入图片描述
该类提供了4个构造方法,根据不同的场景进行选择操作

在这里插入图片描述

  • OutputStream:表示字节输出流
  • Charset:表示编码格式

示例
写入数据到E盘下的文件(write方法)

import java.io.*;public class OutputStreamWriter_ {public static void main(String[] args) {String filePath = "E:\\test.txt";OutputStreamWriter utf8 = null;try {utf8 = new OutputStreamWriter(new FileOutputStream(filePath), "UTF8");try {utf8.write("hello世界");} catch (IOException e) {e.printStackTrace();}} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();} finally {try {utf8.close();} catch (IOException e) {e.printStackTrace();}System.out.println("按照utf-8保存文件成功");}}
}

此时E盘下的test.txt文件的内容为UTF-8编码格式

当处理纯文本数据时,如果使用字符流效率更高,并且可以有效解决中文问题,所以建议将字节流转换为字符流,使用的时候可以指定相应的编码格式。(如:UTF-8,GBK,GB2312,ISO8859-1等)



http://chatgpt.dhexx.cn/article/nvhHogBt.shtml

相关文章

InputStream read()方法详解

在Java7中,InputStream被定义为一个抽象类,相应的,该类下的read()方法也是一个抽象方法,这也就意味着必须有一个类继承InputStream并且实现这个read方法。   查阅Java7 API,我们可以看到,在InputStream中…

【Java学习笔记】InputStreamReader的理解

一、InputStreamReader类 API文档说明:InputStreamReader类是从字节流到字符流的桥接器:它使用指定的字符集读取字节并将它们解码为字符。 它使用的字符集可以通过名称指定,也可以明确指定,或者可以接受平台的默认字符集。每次调…

InputStreamReader介绍使用

InputStreamReader类: java.io.InputStreamReader extends Reader InputStreamReader:是字节流通向字符流的桥梁:他使用指定的charset读取字节并将其解码为字符。(解码:把看不懂的变为能看懂的) 继承自父类的共性成员方法:int r…

jconsole工具监测jvm

背景 本篇文章为了记录如何使用jconsole工具。 jconsole工具使用环境是windows,监控服务端在linux上。 如何启动jconsole 找到你本地jdk的目录,进入bin目录,找到jconsole.exe程序双击启动即可 本地进程 如果是想调试本地程序的话&#xf…

jconsole远程连接服务器失败,提示“连接失败:是否重试“

操作步骤: 运行程序的时候加上参数: -Djava.rmi.server.hostname****** -Dcom.sun.management.jmxremotetrue -Dcom.sun.management.jmxremote.port9991 -Dcom.sun.management.jmxremote.authenticatefalse -Dcom.sun.management.jmxremote.sslfalse 服务器打开端口:效果就…

java jconsole 远程连接_jconsole连接远程tomcat

咱们先说怎么做,然后再聊聊一些原理,当然,本人技术能力有限,有错误的地方,欢迎指正。 1.本机环境,远程环境 本机环境:windows 7 java version "1.8.0_121" 远程环境:centos 6.5 java…

jconsole远程连接的使用

背景 在项目做性能压测的时候,对程序进行分析,需要用到jconsole工具,以前都没用过,学习了一下 连接步骤 1. 打开工具 打开jdk安装目录 -> bin ,找到jconsole.exe 双击打开 2. 到服务器中,加入以下…

简单使用Jconsole

引言 本文简单介绍Jconsole,死锁用例测试分析线程 正文 测试用例 DeadLockDemo : public class DeadLockDemo {private static Object resource1 new Object();//资源 1private static Object resource2 new Object();//资源 2public static void…

linux jconsole 监控jvm,JVM监测分析JConsole

一、基本操作 启动界面 1.JConsole是什么 从Java 5开始引入了JConsole。JConsole是一个内置Java性能分析器,可以从命令行或在GUI shell中运行。您可以轻松地使用JConsole(或者,它更高端的“近亲” VisualVM)来监控Java应用程序性能和跟踪Java中的代码。 …

Java应用程序监控之 jconsole

jconsole jconsole 启动一个图形控制台,使您可以监视和管理Java应用程序。JConsole图形用户界面是一个符合Java Management Extensions(JMX)规范的监视工具。JConsole使用Java虚拟机(Java VM)的广泛工具来提供有关Jav…

JConsole远程监控配置

首先,看本机(Windows)安装了JRE没 Win 》 CMD 打开命令窗口 如有安装,则会显示以下版本信息;若没有显示,就安装吧 1 C:\Users\Administrator>java -version 2 java version "1.8.0_111" 3 …

jconsole连接失败:是否重试?

背景 在学习使用jconsole的时候,按照大佬们的教程一步一步操作的,到了连接的时候却一直报这个错误,连接不上远程服务,百度了很久也没有相关的说明,都是让添加那些启动参数,问题是启动参数我早就添加了。。…

JConsole详解

一、JConsole是什么 从Java 5开始 引入了 JConsole。JConsole 是一个内置 Java 性能分析器,可以从命令行或在 GUI shell 中运行。您可以轻松地使用 JConsole(或者,它更高端的 “近亲” VisualVM )来监控 Java 应用程序性能和跟踪 Java 中的代码。 二、如何启动JConsole 如…

Jconsole小记

今天在看jmeter相关的文章时,看到了这个,网上查看了一些相关的博客,虽然现在还不做性能方面的,先记录下来以便日后查看。 Jconsole,Java Monitoring and Management Console。 Jconsole是JDK自带的监控工具&#xff…

jconsole使用

目的: 为了检查一个经常会跑死的java程序,在网上查询了下, 觉得jconsole这个工具还不错,所以就部署了一把 一、服务器端部署 首先在服务器端,启动你要监控的java程序,我的启动脚本如下: /ho…

java jconsole_jconsole与jvisualvm

jvisualvm同jconsole都是一个基于图形化界面的、可以查看本地及远程的JAVA GUI监控工具,可以认为jvisualvm是jconsole的升级版,因此这里不再介绍jconsole,只介绍jvisualvm。jvisualvm是一个综合性的分析工具,可以认为其整合了jstack、jmap、jinfo等众多调试工具的功能,并以…

JConsole工具使用

转自:https://www.cnblogs.com/baihuitestsoftware/articles/6405580.html#top Jconsole,Java Monitoring and Management Console。Jconsole是JDK自带的监控工具,在JDK/bin目录下可以找到。它用于连接正在运行的本地或者远程的JVM&#xff…

Jconsole

JConsole有界面,能够比较方便地看到堆内存 \线程\类,以及JMX的变化. 线下环境中算是个不错的诊断工具. 那怎么操作呢? 十分简单, 本地的JDK安装路径中找到 jConsole.exe ,双击,填写远程JVM进程即可. 要注意: JConsole使用时要求远程JVM打开了 JMX 端口, JMX端口和服务端口是…

完全体,千字详解:“Java性能调优六大工具”之JConsole工具

JConsole工具是JDK自带的图形化性能监控工具。 通过JConsole工具, 可以查看Java应用程序的运行概况, 并监控堆信息、 永久区使用情况及类的加载情况等。 本文主要介绍JConsole工具的基本使用方法。 一,JConsole连接Java程序 JConsole程序在%JAVA_HOME%/bin目录下,启动…

JConsole使用教程

JConsole是一个Java虚拟机的监控和管理工具,可以监控Java应用程序的内存使用、线程和类信息等。 以下是JConsole的使用教程: 1.启动JConsole JConsole是一个Java自带的工具,可以在bin目录下找到jconsole.exe文件。双击运行该文件即可启动JC…