Java后端开发day42--IO流(二)--字符集&字符流

(以下内容全部来自上述课程)

拓展. try...catch异常处理(能看懂)

接口:AutoCloseable

特点:特定的情况下,可以自动释放资源

注意:只有实现了AutoCloseable接口的类,才能在小括号中创建对象。

1. 字符集

1.1 ASCII字符集(英文字母)

计算机在存储英文的时候只用一个字节就可以了。

  • ASCII编码规则:前面补0,补齐8位
  • ASCII解码规则:直接转成十进制

1.2 GBK(国标扩展)

windows系统默认使用的就是GBK。系统显示:ANSI

  • GBK英文编码规则:不足8位,前面补0
  • GBK汉字编码规则:不需要变动
  • 规则1:汉字两个字节存储
  • 规则2:高位字节二进制一定以1开头,转成十进制之后是一个负数

1.3 Unicode (万国码)

  • UTF-16编码规则:用2~4个字节保存
  • UTF-32编码规则:固定使用4个字节保存
  • UTF-8编码规则:用1~4个字节保存
    英文:一个字节
    中文:三个字节且第一个字节首位是1


拓展:为什么会有乱码?

  1. 读取数据时未读完整个汉字
  2. 编码和解码方式不统一

1.4 编码和解码的方法

2. 字符流

字符流的底层就是字节流。

字符流 = 字节流 + 字符集

使用场景:对于纯文本文件进行读写操作。

2.1 字符输入流

一次读一个字节,遇到中文时,一次读多个字节。

FileReader

  1. 创建字符输入流对象
    细节:如果文件不存在,就直接报错
  2. 读取数据
    细节:
  • 按字节进行读取,遇到中文,一次读多个字节,读取后解码,返回一个整数
  • 读到文件末尾了,read方法返回-1
  1. 释放资源

read细节:

  • 空参:
  • 有参:
    读取数据、解码、强转三步合并了,把强转之后的字符放到数组当中。

2.2 字符输出流

底层会把数据按照指定的编码方式进行编码,变成字节再写到文件中。

2.2.1 FileWriter构造方法

2.2.2 FileWriter书写细节

  1. 创建字符输出流对象
  • 参数是字符串表示的路径或者File对象都是可以的
  • 如果文件不存在会创建一个新的文件,但是要保证父级路径是存在的
  • 如果文件已经存在,则会清空文件,如果不想清空可以打开续写开关
  1. 写数据
  • 如果write方法的参数是整数,但是实际上写到本地文件中的是整数在字符集上对应的字符
  1. 释放资源
    每次使用完流之后都要释放资源
相关推荐
机器视觉知识推荐、就业指导2 小时前
面试问题详解五:Qt 信号与槽的动态管理
开发语言·qt
vvilkim3 小时前
Java主流框架全解析:从企业级开发到云原生
java·运维·云原生
MZ_ZXD0014 小时前
springboot汽车租赁服务管理系统-计算机毕业设计源码58196
java·c++·spring boot·python·django·flask·php
A 计算机毕业设计-小途4 小时前
大四零基础用Vue+ElementUI一周做完化妆品推荐系统?
java·大数据·hadoop·python·spark·毕业设计·毕设
岁忧6 小时前
(nice!!!)(LeetCode 每日一题) 679. 24 点游戏 (深度优先搜索)
java·c++·leetcode·游戏·go·深度优先
四维碎片8 小时前
【Qt】线程池与全局信号实现异步协作
开发语言·qt·ui·visual studio
IT码农-爱吃辣条8 小时前
Three.js 初级教程大全
开发语言·javascript·three.js
☺����9 小时前
实现自己的AI视频监控系统-第一章-视频拉流与解码2
开发语言·人工智能·python·音视频
猿究院--王升9 小时前
jvm三色标记
java·jvm·算法
染翰9 小时前
lua入门以及在Redis中的应用
开发语言·redis·lua