自学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 2021-08-10 21:11  跨越&尘世  阅读(21)  评论(0编辑  收藏  举报