Java IO.字符集,流,缓冲流 转换流 对象操作流

news2024/9/28 9:26:59

一.字符集

如果使用字节流 , 把文本文件中的内容读取到内存时, 可能会出现乱码

如果使用字节流 , 把中文写入文本文件中 , 也有可能会出现乱码

读取n.txt"你好" 两个汉字

字节流读中文,每次只能读一部分所以出现了乱码

字符集(Character set),顾名思义是字符的集合。字符是各种文字和符号的总称,包括文字、标点符号、图形符号、数字、控制符号等。常用的字符集有:ASCII字符集、GBK字符集、Unicode字符集等。

标准ASCII字符集

ASCII(American Standard Code for Information Interchange): 美国信息交换标准代码,包括了英文、符号等。标准ASCII使用1个字节存储一个字符,首尾是0,总共可表示128个字符

GBK(汉字内码扩展规范,国标)

GBK是中国的码表,一个中文以2个字节的形式存储。但不包含世界上所有国家的文字

英文、数字占1个字节

Unicode字符集(统一码,也叫万国码)

UTF-8是Unicode字符集的一种编码方案,采取可变长编码方案,共分四个长度区:1个字节,2个字节,3个字节,4个字节英文字符、数字等只占1个字节(兼容标准ASCII编码),汉字字符占用3个字节。

二.字符流

Java提供一些字符流类,以字符为单位读写数据,专门用于处理流读文本文件可能会有一个小问题。就是遇到中文字符时,可能不会显示完整的字符,那是因为一个中文字符可能占用多个字节存储的问题

1. 字符输出流【Writer】

字符输出流Writer类的常用方法

  • public void write(int c):写出一个字符。
  • public void write(char[] cbuf):将 b.length字符从指定的字符数组写出此输出流。
  • public abstract void write(char[] b, int off, int len):从指定的字符数组写出 len字符,从偏移量 off开始输出到此输出流。
  • public void write(String str) :写出一个字符串。
  • public void write(String str,int off,int len):写出一个字符串的一部分。
  • public abstract void close():关闭流,释放资源,但是在关闭之前会先刷新流。一旦关闭,就不能再写数据。
  • public abstract void flush():刷新流,还可以继续写数据

2.FileWriter

ava.io.FileWriter类是写出字符到文件的便利类。构造时使用系统默认的字符编码(UTF-8)和默认字节缓冲区。

FileWriter类的构造方法:

  • FileWriter(File file):创建一个新的 FileWriter,给定要读取的File对象。
  • FileWriter(String fileName):创建一个新的 FileWriter,给定要读取的文件的名称。
  • FileWriter(File file,boolean append): 创建一个新的 FileWriter,追加写入。
  • FileWriter(String fileName,boolean append): 创建一个新的 FileWriter,追加写入。

关闭输出流,无法写出字符到文件中。但是关闭的流对象,是无法继续写出数据的。如果我们既想写出数据,又想继续使用流,就需要flush 方法了。

  • flush:刷新缓冲区,流对象可以继续使用。
  • close:关闭流,释放系统资源。关闭前会刷新缓冲区。防止数据丢失
  • 即便是flush方法写出了数据,操作的最后还是要调用close方法,释放系统资源。

3 字符输入流【Reader】

java.io.Reader抽象类是表示用于读取字符流的所有类的超类,可以读取字符信息到内存中。它定义了字符输入流的基本共性功能方法。

字符输入流Reader类的常用方法:

  • public int read():每次可以读取一个字符的数据,读取到文件末尾,返回-1。 返回字符数据的编码值。
  • public int read(char[] cbuf):一次最多读取cbuf.length个字符数据,并把读取的字符数据存储到cbuf数组中。返回实际读取到的字符数据个数。 读取到文件末尾返回:-1

4 FileReader

java.io.FileReader类是读取字符文件的便利类。构造时使用系统默认的字符编码(UTF-8)和默认字节缓冲区。

FileReader类的构造方法:

  • FileReader(File file): 创建一个新的 FileReader ,给定要读取的File对象。
  • FileReader(String fileName): 创建一个新的 FileReader ,给定要读取的文件的名称。

三.字符缓冲流

1 .字符缓冲流概述

字符缓冲流不具备读写功能 , 只提供缓冲区 , 真正读写还是需要依赖于构造接收的基本的字符流。

字符缓冲流的构造方法

  • public BufferedReader(Reader in):创建一个 新的缓冲输流。
  • public BufferedWriter(Writer out): 创建一个新的缓冲出流。

2 字符缓冲流复制纯文本文件

 将c.txt文件内容复制给a.txt

3 字符缓冲流特有功能

  • BufferedReader:public String readLine(): 读取文件一行数据, 不包含换行符号 , 读到文件的末尾返回null。
  • BufferedWriter:public void newLine(): 写一个行分隔符,会根据操作系统的不同,写入不同的行分隔符

需求:读取文件中的数据排序后再次写出去

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

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

相关文章

美股:Nvidia的新一代AI芯片Blackwell或因设计缺陷推迟上市

设计缺陷影响推出时间 据知情人士透露,全球领先的芯片制造商Nvidia计划推出的最新人工智能(AI)芯片Blackwell可能面临长达三个月甚至更长的推迟。这一变动可能会影响到Nvidia的多位重要客户,包括Meta、谷歌和微软等,这些客户已订购了总值数百…

Datawhale AI 夏令营 从零入门 AI for Science(AI + 经济)

1.在TASK3中虽然给出了时间序列挖掘加融合模型的方法预测price,但是并不能识别到负电价的情况。查看TASK3给出的代码的预测结果可以发现模型几乎不会预测出负数,这和实际情况是有差别的。 2.利用爬虫爬取天气信息与风电信息绘制热力图 惊人的发现price和…

【MATLAB源码】数学建模基础教程(2)--层次分析法(评价类算法)

系列文章目录在最后面,各位同仁感兴趣可以看看! 层次分析法 引言一、层次分析法的特点二、模型的建立求解过程 (1)问题的提出:实际问题的转化(2)建立层次结构模型(3)构造判断(成对比较)矩阵(4)一致性检验:三、层次分析法的优点与…

【无所从来,亦无所去】纪念去世的奶奶和外公「纪念网页」

大家好,我是DX3906 🌈 欢迎莅临我的个人主页 👈这里是我静心耕耘大前端领域、真诚分享知识与智慧的小天地!🎇 纪念 2024年 奶奶 85岁、 外公83岁。他们俩分别在今年的2月份和7月份离开了。 时光倒流,奶…

美股:巴菲特减持苹果股份

财报亮点 伯克希尔哈撒韦发布的2024年第二季度财报显示,公司营收达936.53亿美元,略高于市场预期的910.9亿美元。净利润为303.48亿美元,其中投资收益占据一大比例,较去年同期的359.12亿美元有所下降,但远超市场预期的17…

JNPF全新V5.0版本!重磅升级——其他升级优化篇

尊敬的JNPF用户们: 我们非常高兴地宣布,经过团队数月的辛勤努力和不断的技术创新,JNPF快速开发平台终于迎来了里程碑式的全新升级——V5.0版本!这一版本的更新发布,不仅代表着我们技术实力的进一步提升,是…

Golang死锁vs操作系统死锁

目录 一、死锁 二、Golang死锁场景 2.1 重复上锁 2.2 不会减少的 WaitGroup 2.3 空select 2.4 channel 一、死锁 1.golang中死锁的触发条件: 死锁是当 Goroutine 被阻塞而无法解除阻塞时产生的一种状态。 2.操作系统死锁: 发生死锁时,线…

如何在2024年成为PDF合并文件高手?试试这3款软件!

在这个数字化的年代,PDF文件早就成了我们工作学习时的老朋友了。不过,要是碰上一堆PDF文件要合并,是不是觉得挺头疼的?别急,今天我们就来聊聊2024年怎么变成合并PDF的大佬,还给你推荐三款特别实用的软件&am…

【从零开始一步步学习VSOA开发】运行hellovsoa

运行hellovsoa 和所有编程技术的首个程序一样,我们先创建、编译、部署、运行一个最简单的示例程序: hellovsoa。 创建 base 工程 需要先创建一个 workspace 工作目录,然后在 workspace 里先新建 base 工程。 打开 RealEvo-IDE&#xff0c…

BPM(业务流程管理):提升企业效率的关键

在现代企业中,业务流程管理(BPM)已成为提升效率和优化运营的关键工具。随着企业环境的不断变化和竞争的加剧,越来越多的组织开始关注如何通过有效的BPM实践来提升业务表现。本文将探讨BPM的基本概念、实施策略以及如何通过BPM实现…

Java并发中的死锁四大条件与避免策略

Java并发中的死锁四大条件与避免策略 1、死锁是啥?2、死锁的四大条件3、避免死锁的策略 💖The Begin💖点点关注,收藏不迷路💖 1、死锁是啥? 死锁就像是几个朋友在聚会时,每个人都想和别人手里的…

你的财富正在被一个叫做通货膨胀的怪兽给吞噬掉,你却浑然不觉。

据统计,2024年全球总体通货膨胀率预计达到5.8%,这意味着:你的财富正在被一个叫做通货膨胀的怪兽给吞噬掉,你却浑然不觉。 数据来源:国际货币基金组织 如何跑赢通货膨胀? 家庭财富的积累速度,要…

[Git][分支管理][下]详细讲解

目录 1.合并冲突2.分支管理策略3.分支策略1.基本原则2.bug分支3.删除临时分支 1.合并冲突 在实际分⽀合并的时候,有时候可能会遇到代码冲突的问题,例如: dev分支在写一部分代码,而master分支也没闲着,也在写着同一份代…

MATLAB指针读数识别系统

前言 ①经过在工厂的实地测试,图像采集与传输装置可以正常工作,电脑端可以接收到清晰的图像,并且整个系统具有一定的的抗干扰的能力,在嘈杂的环境中亦可以实现其功能。 ②通过matlab可实现图片的预处理以及指针识别读数识别&…

MySQL笔记(三):修改表

##注:需要在cmd管理员命令行链接mysql再打开sqlyog 一、基本介绍 二、CRUD([create][read][update][delete],增删改查)语句 1、insert语句 (添加数据) insert into table_name(第一项,第二项&#xff0…

LeetCode(力扣)数组篇 JAVA刷题详解

1 简介 是不是有许多小伙伴在刷力扣的时候感觉无从下手?从头按顺序开始刷的童鞋们可能会比较有感触,为什么才第四题就感觉很难了?没关系,本文将对力扣的 1-500 题中不需要会员的数据结构与算法题目(数据库与 shell 除外)进行分类&#xff0…

Linux网络编程之dpdk的环境配置详解

文章目录 一、dpdk是什么?二、dpdk的环境配置多队列网卡是什么?怎么判断是否为多队列网卡?怎么修改成多队列网卡?修改内存配置,使其支持hugepage(巨页)下载dpdk编译dpdk 一、dpdk是什么? DPDK(…

用苹果Vision Pro隔空操控机器人,英伟达:「人机合一」也不难嘛

昨日,英伟达创始人黄仁勋在 SIGGRAPH 2024 Keynote 演讲中讲到了其人形机器人通用基础模型「Project GR00T」。该模型在功能上迎来了一系列更新。 德克萨斯大学奥斯汀分校助理教授、英伟达高级研究科学家朱玉可发推,在视频中演示了英伟达如何将通用家务机器人大规模仿真训练…

(STM32笔记)十一、通过EXTI外部中断实现 按键控制LED

我用的是正点的STM32F103来进行学习,板子和教程是野火的指南者。 之后的这个系列笔记开头未标明的话,用的也是这个板子和教程。 十一、通过EXTI外部中断实现 按键控制LED 十一、通过EXTI外部中断实现 按键控制LED1、按键模块按键原理图按键程序思路 2、中…

【数据结构】mapset详解

🍁1. Set系列集合 Set接口是一种不包含重复元素的集合。它继承自Collection接口,所以可以使用Collection所拥有的方法,Set接口的实现类主要有HashSet、LinkedHashSet、TreeSet等,它们各自以不同的方式存储元素,但都遵…