返回顶部
首页 > 资讯 > 后端开发 > Python >Java转换流(InputStreamReader/OutputStreamWriter)的使用
  • 628
分享到

Java转换流(InputStreamReader/OutputStreamWriter)的使用

Java转换流JavaInputStreamReaderOutputStreamWriter 2023-01-28 12:01:04 628人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录概述为什么会有转换流?InputStreamReaderOutputStreamWriter概述 转换流是字节流到字符流的桥梁,在转换的过程中,可以指定编码。转换流也是一种处理流

概述

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

转换流的两个类

  • 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等)

到此这篇关于Java转换流(InputStreamReader/OutputStreamWriter)的使用的文章就介绍到这了,更多相关Java转换流内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java转换流(InputStreamReader/OutputStreamWriter)的使用

本文链接: https://lsjlt.com/news/178500.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java转换流(InputStreamReader/OutputStreamWriter)的使用
    目录概述为什么会有转换流?InputStreamReaderOutputStreamWriter概述 转换流是字节流到字符流的桥梁,在转换的过程中,可以指定编码。转换流也是一种处理流...
    99+
    2023-01-28
    Java转换流 Java InputStreamReader OutputStreamWriter
  • JAVA OutputStreamWriter流的实现
    一、OutputStreamWriter流     API说明:OutputStreamWriter是从字符流到字节流的桥接:使用指定的字符集将写入其...
    99+
    2024-04-02
  • Java中的InputStreamReader和OutputStreamWriter源码分析_动力节点Java学院整理
    InputStreamReader和OutputStreamWriter源码分析1. InputStreamReader 源码(基于jdk1.7.40)package java.io; import java.nio.charset.Cha...
    99+
    2023-05-31
    java inputstreamreader outputstreamwriter
  • java中转换流有哪些类
    今天就跟大家聊聊有关java中转换流有哪些类,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系...
    99+
    2023-06-14
  • Golang调用FFmpeg转换视频流的实现
    目录问题背景方法实现1. 使用FFmpeg-go封装好的方法2. 直接调用FFmpeg总结问题背景 问题背景是在,由于视频采集端使用的是H264编码采集的裸流,而网络流媒体大多是以F...
    99+
    2023-02-24
    Golang FFmpeg转换视频流 Golang FFmpeg视频流
  • java的类型转换
    有关int与string的互转[@more@]如何将字串 String 转换成整数 int A. 有两个方法: 1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt([...
    99+
    2023-06-03
  • 详解Java对象转换神器MapStruct库的使用
    目录前言MapStruct简介MapStruct入门1. 引入依赖2. 需要转换的对象3. 创建转换器4. 验证5. 自动生成的实现类MapStruct进阶场景1:属性名称不同、(基...
    99+
    2024-04-02
  • Java中的BaseTypeHandler自定义类型转换器的使用
    目录简述通用的类型转换器(存在一些问题)定制类型转换器简述 mysq5.7之后新增了json类型,但是在使用的过程中,Json数组中的值小于Integer.MAX_VALUE,则反序...
    99+
    2024-04-02
  • 如何使用Java实现大小写转换
    这篇文章主要介绍“如何使用Java实现大小写转换”,在日常操作中,相信很多人在如何使用Java实现大小写转换问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用Java实现大小写转换”的疑惑有所帮助!接下来...
    99+
    2023-07-02
  • Java使用fastjson对String、JSONObject、JSONArray相互转换
    目录fastjson对String、JSONObject、JSONArray相互转换com.alibaba.fastjson.JSONObject、JSONArray与String之...
    99+
    2024-04-02
  • java怎么将文件流直接转换成文件
    要将文件流直接转换成文件,可以使用FileOutputStream类。下面是一个示例代码: import java.io.*; p...
    99+
    2023-10-23
    java
  • Spring IOC:CreateBean环节中的流程转换
    目录一 . 前言二 . 流程梳理2.1 实例化创建2.1.1 doGetBean 入口2.1.2 doGetBean 补充节点2.1.3 AbstractBeanFactory # ...
    99+
    2024-04-02
  • Golang怎么调用FFmpeg转换视频流
    这篇文章主要介绍“Golang怎么调用FFmpeg转换视频流”,在日常操作中,相信很多人在Golang怎么调用FFmpeg转换视频流问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Golang怎么调用FFmpe...
    99+
    2023-07-05
  • 如何使用JAXBContext实现Java和xml的互相转换
    这篇文章主要介绍了如何使用JAXBContext实现Java和xml的互相转换,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。JAXBContext实现Java和xml的互相转...
    99+
    2023-06-20
  • 使用Java如何实现转换金额的大小写
    这篇文章给大家介绍使用Java如何实现转换金额的大小写,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。具体内容如下 public class MoneyUtil { private static final S...
    99+
    2023-05-31
    java 大小转换 ava
  • Java下数字类型的转换 (转)
    Java下数字类型的转换 (转)[@more@]作者:家居猫 各种数字类型转换成字符串型: String s = String.valueOf( value); // 其中 value 为任意一种数字类型。 字符串型转换成各种数字类型: S...
    99+
    2023-06-03
  • 使用java怎么将视频转换成音频
    使用java怎么将视频转换成音频?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。spring boot项目pom文件中添加以下依赖<!-- htt...
    99+
    2023-06-14
  • 使用JAVA怎么将PDF转换为HTML文档
    使用JAVA怎么将PDF转换为HTML文档?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。引入Maven依赖<!-- https://mvnrepositor...
    99+
    2023-06-15
  • java BigDecimal使用(小数点,字符串等转换)
    一、BigDecimal介绍  Java中提供了操作大数字(超过16位有效位)的类, 即 java.math.BigInteger 类和 java.math.BigDecimal 类,用于高精度计算。 float和Double只能用来做科学...
    99+
    2023-09-15
    java bigdecimal arith 加减乘除 转换
  • 使用java如何将文字转换为五笔
    使用java如何将文字转换为五笔?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。具体如下:package com.core.utils;public class ...
    99+
    2023-05-31
    java ava
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作