随笔 - 217  文章 - 4  评论 - 4  阅读 - 23587

自学Java第三十六课

今天学习了IO流中的字符流,字节流被称为万能流,而字符流必须在自己能看懂文本文档的前提下进行。但对于汉字来说,字节流使用起来便有很多不方便,所以字符流便使用起来。

  字符流=字节流+编码表。注:汉字存储的时候,无论使用哪种编码表都会显示负数。

编码表

  编码:按某种规则将字符存储在计算机中;解码:按照某种规则,将存储在计算机中的二进制数解析出来。

    注:信息存储和读取时,编码规则和解码规则必须保持一致,否则会乱码。

字符集

  ①一个系统支持的所有字符的集合,包括国家文字、标点符号、图形符号、数字。

  ②一套字符集至少有一套字符编码,常见字符集:ASCII字符集、GBXXX字符集、Unicode字符集。

  ASCII字符集:显示现代英语,包括控制字符和可显示的字符。

  GBK:最常用的中文码表。

  Unicode:为表达任意语言的任意字符而设计的,称为统一码,包括UTF-8、UTF-16、UTF32。UTF-8克表示Unicode标准中任意字符。

字符串中编码解码问题

  编码

byte[] getBytes() 使用平台默认字符集将String编码为一系列字节,将结果存储在字节数组
byte[] getBytes(String charsetName) 使用指定字符集将String编码为一系列字节,将结果存储在字节数组

 

 

 

 

不同平台中的默认编码集不同,eclipse使用的是GBK,vscode使用的是UTF-8

  解码

String(byte[] bytes) 使用平台默认字符集进行解码,指定字节数组,构建String
String(byte[] bytes,String charsetName) 指定字符集解码,指定字符数组构造新的String

 

 

 

 

 

 

 字符流中编码解码问题

  字符流抽象基类:Reader字符输入流抽象类 ;Writer字符输出流抽象基类。可以将Reader将数据读入,Writer则是将数据写出。

  与编码相关的类:InputStreamReader    OutputStreamWriter

 

字符流写数据的方式

void write(int c) 写入一个字符
void write(int[] abcde) 写入一个字符数组
void write(char[],off,int len) 写入一个字符数组的一部分
void write(String str) 写入一个字符串
void write(String str,off,int len) 写入一个字符串的一部分

 

 

 

 

 

 

释放资源

void flush() 刷新资源,将数据从缓冲区刷出,可以继续写数据
void close() 释放资源,先刷新再释放,不可以继续写数据

 

 

 

读取数据

int read() 一次读取一个字符数据
int read(char[] cubtf) 一次读取一个字符串数据

 

 

 

 

 

 

 

 使用字符流进行文件的复制

 

 字符缓冲流

  BufferedWriter:将文本写入字符输出流,缓冲字符,从提供单个字符,数组和字符串高效写入,可指定缓冲区的大小,默认缓冲区足够大

  BufferedReader:从字符输入流读取文本,缓冲字符,从提供单个字符,数组和字符串高效写入,可指定缓冲区的大小,默认缓冲区足够大

构造方法

BufferedWriter(Write out)    BufferedRaeder(Reader in)

 

 字符缓冲流特有功能

BufferedWriter:void newline() 写一行分隔符,行分隔符由系统属性定义。可以代替\r\n

BufferedReader:public String reafline():读一行文字,包含行的内容的字符串,不包含任何终止字符,如果已达到结尾,显示为null。可以用来终止循环

 

 利用缓冲流的特有功能写复制案例

复制代码
 1 import java.io.BufferedReader;
 2 import java.io.BufferedWriter;
 3 import java.io.FileReader;
 4 import java.io.FileWriter;
 5 import java.io.IOException;
 6 
 7 public class text {
 8     public static void main(String[] args) throws IOException{
 9         //创建数据源对象
10         BufferedReader br=new BufferedReader(new FileReader("lib\\student.java"));
11         //创建目的地对象
12         BufferedWriter bw=new BufferedWriter(new FileWriter("lib\\j.java"));
13         String line;
14         while((line=br.readLine())!=null){
15             bw.write(line);
16             bw.newLine();
17             bw.flush();
18         }
19         br.close();
20         bw.close();
21     }
22 }
复制代码

明天将会学习IO中的特殊操作流。

posted on   跨越&尘世  阅读(22)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示