IO流 之 转换流( InputStreamReader 字节输入转换流 和 OutputStreamWriter 字节输出转换流)

news2024/11/19 17:23:17

在这里插入图片描述
当文本文件和代码的编码不一致时,使用字符流会导致读取出来的文字乱码。如下:

在这里插入图片描述
读取文件的编码时GBK编码。
在这里插入图片描述
代码的编码时UTF-8的编码。
在这里插入图片描述
程序运行出来中文则是乱码。

这里就要使用到转换流了。
在这里插入图片描述

字节转换流

InputStreamReader 字节输入转换流

在这里插入图片描述
使用步骤

  1. 获取原始字节流
  2. 使用字节转换流转换
  3. 再转换为缓冲字符流

之后使用缓冲字符流的readLine()方法读取.

package day0927;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.InputStreamReader;

public class demo12 {
    public static void main(String[] args) {
        try (
                //获取原始字节流
                FileInputStream fis = new FileInputStream("src/e.txt");
                //使用字节转换流转换
                InputStreamReader isr = new InputStreamReader(fis,"GBK");
                //再转换为缓冲字符流
                BufferedReader bf = new BufferedReader(isr)
        ){
            String line;

            while (  (line=bf.readLine())!=null){
                System.out.println(line);
            }
        }catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

OutputStreamWriter 字节输出转换流

在这里插入图片描述
在这里插入图片描述
接下来的代码示例,是从一个UTF-8编码的文件读取字符之后,输出到一个GBK编码的文件中。

package day0927;
import java.io.*;

public class demo12 {
    public static void main(String[] args) {
        try (
                //获取原始字节流
                FileReader fis = new FileReader("src/a.txt");
                //再转换为缓冲字符流
                BufferedReader bf = new BufferedReader(fis);

                //获取原始字节输出流
                OutputStream os = new FileOutputStream("src/e.txt",true);
                //字节转换输出流将原始流转换为GBK编码
                OutputStreamWriter gbk = new OutputStreamWriter(os,"GBK");
                //转换为缓冲字符输出流
                BufferedWriter bw = new BufferedWriter(gbk);
        ){
            String line;
            while (  (line=bf.readLine())!=null){
                System.out.println(line);
                //写入字符
                bw.write(line);
                //换行
                bw.newLine();
            }
        }catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

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

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

相关文章

一文搞懂时间序列ARIMA模型

文章目录 1 ARIMA的定义2 差分(differencing)2.1 Order:差分的阶数2.2 Lag:差分的滞后2.3 滞后运算/滞后算子/延迟算子2.4 关于差分的两个误解 3 ARIMA的平稳性4 ACF与PACF5 时序模型的选择与评估5.1 超参数p、q、d的确定5.2 时间序列的评估指标 1 ARIMA…

Linux自用笔记

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: Linux相关 ✨特色专栏: My…

码支付添加银行转账功能,手动回调

在后台中通道列表先加上 路径&#xff1a;【后台】 - > 【通道管理】 - > 【新增】 总后台页面通道类型加上支付类型yh_pay和通道yhzz添加后存到数据库admin_chanel上 修改商户页面的【新增通道】页面 /view/index/channel/index.html 添加一个支付通道 <option…

【算法训练-数组 三】【数组矩阵】螺旋矩阵、旋转图像、搜索二维矩阵

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是螺旋矩阵&#xff0c;使用【二维数组】这个基本的数据结构来实现 螺旋矩阵【EASY】 二维数组的结构特性入手 题干 解题思路 根据题目示例 mat…

【DevOps】搭建你的第一个 Docker 应用栈

搭建你的第一个 Docker 应用栈 1.Docker 集群部署2.第一个 Hello World2.1 获取应用栈各节点所需镜像2.2 应用栈容器节点互联2.3 应用栈容器节点启动2.4 应用栈容器节点的配置2.4.1 Redis Master 主数据库容器节点的配置2.4.2 Redis Slave 从数据库容器节点的配置2.4.3 Redis 数…

sql server查询结果:行转列、XML形式

1.普通查询 SELECT M.name From Menu M INNER JOIN MenuRoleRelation MRR ON M.idmrr.MenuId AND MRR.RoleId1; 结果&#xff1a; 2.做xml字符串返回 最后面加上&#xff1a;FOR XML PATH() 结果&#xff1a; 3.可以改为逗号分隔 SELECT ,M.name From Menu M INNER JOIN Me…

深度学习——深度学习计算一

深度学习——深度学习计算一 文章目录 前言一、层和块1.1. 自定义块1.2. 顺序块1.3. 在前向传播函数中执行代码1.4. 小结 二、参数管理2.1. 参数访问2.1.1. 目标参数2.1.2. 一次性访问所有参数2.1.3. 从嵌套块收集参数 2.2. 参数初始化2.2.1. 内置初始化2.2.2. 自定义初始化 2.…

常用Redis界面化软件

对于Redis的操作&#xff0c;前期有过介绍【Centos 下安装 Redis 及命令行操作】。而在Redis的日常开发调试中&#xff0c;可使用可视化软件方便进行操作。 本篇主要介绍Redis可视化的两款工具&#xff1a;Redis Desktop Manager和AnotherRedisDesktopManager。 1、Redis Desk…

unity 控制玩家物体

创建场景 放上一个plane&#xff0c;放上一个球 sphere&#xff0c;假定我们的球就是我们的玩家&#xff0c;使用控制键w a s d 来控制球也就是玩家移动。增加一个材质&#xff0c;把颜色改成绿色&#xff0c;把材质赋给plane&#xff0c;区分我们增加的白球。 增加组件和脚…

POJ 2104 K-th Number 平方分割 / 线段树

一、题目大意 长度为n&#xff08;n<100000&#xff09;的数组&#xff0c;进行m次查询&#xff08;m<5000&#xff09;&#xff0c;每次查询时&#xff0c;输入为 i j k&#xff0c;返回为数组 [i,j] 的分片里第k大数字&#xff08;1<i<j<n,k<j-i1) 二、解…

轻松实现视频、音频、文案批量合并,享受批量剪辑的便捷

在日常生活中&#xff0c;我们经常会需要将多个视频、音频和文案进行合并剪辑&#xff0c;以制作出符合我们需求的短视频。然而&#xff0c;这个过程通常需要花费大量的时间和精力。幸运的是&#xff0c;现在有一款名为“固乔智剪软件”的工具可以帮助我们轻松完成这个任务。 首…

mac怎么卸载软件没有叉的那种,别慌看这里

ac电脑对于很多人来说是一个高效、优雅的工作工具&#xff0c;但就像所有电子设备一样&#xff0c;有时候也需要进行软件的添加和删除以保持其最佳性能。然而&#xff0c;对于一些特殊类型的软件—也就是那些没有"叉"标志来直接卸载的—如何正确地从Mac上删除它们呢&…

RK3568笔记一:RKNN开发环境搭建

若该文为原创文章&#xff0c;转载请注明原文出处。 由于对AI的好奇&#xff0c;想要学习如何部署AI&#xff0c;所以从RV1126到RK3568中过渡。 一、介绍 RK3568开发板使用的是正点原子新出的ATK-DLRK3568 开发板&#xff0c;主要是学习从训练到部署的全过程&#xff0c;并记…

One Thread One Loop主从Reactor模型⾼并发服务器

One Thread One Loop主从Reactor模型⾼并发服务器 文章目录 One Thread One Loop主从Reactor模型⾼并发服务器一些补充HTTP服务器Reactor 模型eventfd通用类Any 目标功能模块划分&#xff1a;SERVER模块Buffer模块&#xff1a;编写思路&#xff1a;接口设计&#xff1a;具体实现…

Go Gin Gorm Casbin权限管理实现 - 3. 实现Gin鉴权中间件

文章目录 0. 背景1. 准备工作2. gin中间件2.1 中间件代码2.2 中间件使用2.3 测试中间件使用结果 3. 添加权限管理API3.1 获取所有用户3.2 获取所有角色组3.3 获取所有角色组的策略3.4 修改角色组策略3.5 删除角色组策略3.6 添加用户到组3.7 从组中删除用户3.8 测试API 4. 最终目…

FreeRTOS入门教程(队列的概念及相关函数介绍)

文章目录 前言一、队列概念二、队列的使用方法1.创建队列动态创建静态创建 2.复位队列3.删除队列4.写队列5.读队列6.查询队列7.覆盖/查看覆盖查看 总结 前言 本篇文章将带大家学习FreeRTOS中的队列&#xff0c;掌握什么是队列&#xff0c;并且学习如何使用队列&#xff0c;在什…

集成学习

集成学习&#xff08;Ensemble Learning) - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/27689464集成学习就是组合这里的多个弱监督模型以期得到一个更好更全面的强监督模型&#xff0c;集成学习潜在的思想是即便某一个弱分类器得到了错误的预测&#xff0c;其他的弱分类器…

Pytorch基础:Tensor的permute方法

相关阅读 Pytorch基础https://blog.csdn.net/weixin_45791458/category_12457644.html 在Pytorch中&#xff0c;permute是Tensor的一个重要方法&#xff0c;同时它也是一个torch模块中的一个函数&#xff0c;它们的语法如下所示。 Tensor.permute(*dims) → Tensor torch.perm…

PbootCMS SQL注入漏洞

漏洞复现 访问漏洞url 数据库是mysql 构造payload&#xff0c;条件为假时&#xff0c;未查到任何数据 http://x.x.x/index.php?search 1select 0页面回显 构造payload&#xff0c;条件为真时&#xff0c;查询到数据 1select1文笔生疏&#xff0c;措辞浅薄&#xff0c;望各…

邮箱注册实现(二)注册接口实现

如果邮箱地址错误或非法&#xff0c;运行时会报错。因此需要增加校验&#xff1a; Validated RestController RequestMapping("/api/auth") public class AuthorizeController {ResourceAccountService service;GetMapping("/ask-code")public RestBean&l…