IO流-转换流

news2025/4/6 23:57:22

引出问题:不同编码读取时会乱码

不同编码读取时会乱码的问题

如果代码编码和被读取的文本文件的编码是一致的,使用字符流读取文本文件时不会出现乱码

如果代码编码和被读取的文本文件的编码是不一致的,使用字符流读取文本文件时就会出现乱码

字符输入转换流

InputStreamReader(字符输入转换流)

  • 解决不同编码时,字符流读取文本内容乱码的问题
  • 解决思路:先获取文件的原始字节流,再将其按真实的字符集编码转成字符输入流,这样字符输入流中的字符就不乱码了
构造器说明
public InputStreamReader(InputStream is)把原始的字节输入流,按照代码默认编码转成字符输入流(与直接用FileReader的效果一样)
public InputStreamReader(InputStream is,String charset)把原始的直接输入流,按照指定字符集编码转成字符输入流(重点)
import java.io.*;

public class Test {
    public static void main(String[] args){
        try (
                // 得到文件的原始字节流(GBK的字节形式)
                InputStream is = new FileInputStream("src\\com\\abc.txt");
                // 把原始的字节输入流按照指定的字符集编码转换成字符输入流
                Reader isr = new InputStreamReader(is,"GBK");
                // 把字符输入流包装成缓冲字符输入流
                BufferedReader br = new BufferedReader(isr);
                ){
            String line;
            while ((line = br.readLine()) != null){
                System.out.println(line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

字符输入转化流

控制写出去的字符使用说明字符集编码

1、调用String提高的getBytes方法解决

2、使用“字符输出转换流”实现

OutputStreamWriter(字符输出转换流)

  • 作用:可以控制写出去的字符使用什么字符集编码
  • 解决思路:获取字节输出流,再按照指定的字符集编码将其转换成字符输出流,以后写出去的字符就会用该字符集编码了
构造器说明
public OutputStreamWriter(OutputStream os)可以把原始的字节输出流,按照代码默认编码转换成字符输出流
public OutputStreamWriter(OutputStream os,String charset)可以把原始的字节输出流,按照指定编码转换成字符输出流(重点)
import java.io.*;

public class Test {
    public static void main(String[] args){
        try (
                // 创建一个文件字节输出流
                OutputStream os = new FileOutputStream("src\\com\\abc.txt");
                // 把原始的字节输出流按照指定的字符集编码转换成字符输出流
                Writer osw = new OutputStreamWriter(os,"GBK");
                // 把字符输出流包装成缓冲字符输出流
                BufferedWriter bw = new BufferedWriter(osw);
                ){
            bw.write("123456");
            bw.write("abcdefg");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

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

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

相关文章

智能传感器阅读笔记-智能传感器的发展历程、发展趋势及方向

智能传感器的发展历程 第一代智能传感器 第一代智能传感器是数字式传感器,指改造A/D转换模块,并采用数字技术进行信号处理,使输出信号为数字信号(或数字编码)的传感器,主要由放大器、A/D转换模块、微处理…

在UE5中使用体积材质

在平时使用UE的材质设置时,经常会看见Material Domain Volume类型,但是却很少使用。其实该类型可以配合体积雾使用,并制作体积效果以弥补自带雾参数的不足。 操作流程 首先找到场景中的ExponentialHeightFog组件,开启体积雾Volu…

Vuex核心知识整理

目录 1 搭建vuex环境 2 求和案例 3 getters 配置项 4 mapState 和 mapGetters 5 mapMutations 和 mapActions 6 Vuex 模块化 1 搭建vuex环境 vuex工作原理图(摘自官网) 什么时候使用Vuex: 1.当多个组件依赖于统一状态 2.来自不同组件…

【刷题】牛客— NC21 链表内指定区间反转

链表内指定区间反转 题目描述思路一(暴力破解版)思路二(技巧反转版)思路三(递归魔法版)Thanks♪(・ω・)ノ谢谢阅读!!!下一篇文章见&…

黑群晖一键修复:root、AME、DTS、转码、CPU型号等

食用方法:SSH连接群晖使用临时root权限执行 AME3.x激活补丁 只适用于x86_64的:DSM7.x Advanced Media Extensions (AME)版本3.0.1-2004、3.1.0-3005 激活过程需要下载官方的解码包,过程较慢,耐心等待。。。 DSM7.1和7.2的AME版…

【开源】SpringBoot框架开发智能教学资源库系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 课程档案模块2.3 课程资源模块2.4 课程作业模块2.5 课程评价模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 课程档案表3.2.2 课程资源表3.2.3 课程作业表3.2.4 课程评价表 四、系统展示五、核心代…

Vulnhub靶机:DC6

一、介绍 运行环境:Virtualbox 攻击机:kali(10.0.2.15) 靶机:DC6(10.0.2.59) 目标:获取靶机root权限和flag 靶机下载地址:https://www.vulnhub.com/entry/dc-6,315/…

基于深度置信网络的多模态过程故障评估方法及应用

源自:自动化学报 作者:张凯, 杨朋澄, 彭开香, 陈志文 “人工智能技术与咨询” 发布 摘 要 传统的多模态过程故障等级评估方法对模态之间的共性特征考虑较少, 导致当被评估模态故障信息不充分时, 评估的准确性较低. 针对此问题, 首先, 提出一种共性–…

springboot登录校验

一、登录功能 二、登录校验 2.1 会话技术 2.2 JWT令牌 JWT令牌解析: 如何校验JWT令牌?Filter和Interceptor两种方式。 2.3 过滤器Filter 2.3.1 快速入门 修改上述代码: 2.3.2 详解 2.3.3 登录校验-Filter 2.4 Interceptor拦截器 2.4.1 …

NLP_Transformer架构

文章目录 Transformer架构剖析编码器-解码器架构各种注意力的应用Transformer中的自注意力Transformer中的多头自注意力Transformer中的编码器-解码器注意力Transformer中的注意力掩码和因果注意力 编码器的输入和位置编码编码器的内部结构编码器的输出和编码器-解码器的连接解…

C++重新认知:智能指针

0/# 一、为什么要有智能指针 内存泄露是我们开发大型项目时最为头疼的问题,当我们将对象建立在堆上时,因为需要我们自己手动释放,因此避免不了忘记删除,或者删除时没有考虑清楚情况的问题,从而造成悬挂指针或者是野指针…

UnityShader——06UnityShader介绍

UnityShader介绍 UnityShader的基础ShaderLab UnityShader属性块介绍 Properties {//和public变量一样会显示在Unity的inspector面板上//_MainTex为变量名,在属性里的变量一般会加下划线,来区分参数变量和临时变量//Texture为变量命名//2D为类型&…

微服务学习Day4

文章目录 初始MQ同步通讯和异步通讯MQ常见技术介绍 RabbitMQ快速入门入门案例 SpringAMQP介绍例子WorkQueue模型exchange交换机消息转换器 初始MQ 同步通讯和异步通讯 MQ常见技术介绍 RabbitMQ快速入门 入门案例 SpringAMQP 介绍 例子 WorkQueue模型 exchange交换机 消息转换…

二进制和进制转换

前言 我们经常能听到2进制、8进制、10进制、16进制这样的讲法,那是什么意思呢?其实2进制、8进 制、10进制、16进制是数值的不同表示形式而已。 比如:数值15的各种进制的表示形式: 15的2进制:111115的8进制&#xff1…

最小生成树(习题)

拆地毯 这个就是套用最小生成树的模板&#xff0c;只不过要将sort函数改成从大到小进行排序。然后这个退出条件是只要大于k就退出。 代码如下 #include<iostream> #include<cmath> #include<algorithm> #define N 1009000 using namespace std; int n,m,k…

HarmonyOS—状态管理概述

在前文的描述中&#xff0c;我们构建的页面多为静态界面。如果希望构建一个动态的、有交互的界面&#xff0c;就需要引入“状态”的概念。 图1 效果图 上面的示例中&#xff0c;用户与应用程序的交互触发了文本状态变更&#xff0c;状态变更引起了UI渲染&#xff0c;UI从“He…

【杂谈】裁我?我是研发,我是研发啊!

闲谈 这两年互联网是越来越不太平了&#xff0c;前有国外互联网裁员的妖风四起&#xff0c;后来寒气又传到国内&#xff0c;让我们这群打工人叫苦连天。最近有部电影蛮火的&#xff0c;叫《年会不能停》&#xff0c;感觉跟我前司很相似&#xff0c;不过好像由于今年业绩不太行…

解决LeetCode编译器报错的技巧:正确处理位操作中的数据类型

一天我在leetcode上刷题时&#xff0c;遇到了这样的题目&#xff1a; 随即我写了如下的代码&#xff1a; int convertInteger(int A, int B) {int count 0;int C A ^ B;int flag 1;while(flag){if (C & flag){count;}flag<<1;}return count;} 但LeetCode显示如下…

you-get,一个超强的 Python 库

你好&#xff0c;我是坚持分享干货的 EarlGrey&#xff0c;翻译出版过《Python编程无师自通》、《Python并行计算手册》等技术书籍。 如果我的分享对你有帮助&#xff0c;请关注我&#xff0c;一起向上进击。 现在在线视频超火爆&#xff0c;可是我还是更倾向于将视频下载至本地…

文件上传漏洞--Upload-labs--Pass03--特殊后缀与::$DATA绕过

方法一&#xff1a;特殊后缀绕过&#xff1a; 一、什么是特殊后缀绕过 源代码中的黑名单禁止一系列后缀名 之外的后缀&#xff0c;称之为‘特殊后缀名’&#xff0c;利用其来绕过黑名单&#xff0c;达到上传含有恶意代码的文件的目的。 二、代码审计 接下来对代码逐条拆解进行…