共计 2546 个字符,预计需要花费 7 分钟才能阅读完成。
字符编码
解码:字符(能看懂的)–> 字节(看不懂的)
解码:字节(看不懂的)–> 字符(能看懂的)
编码表:生存中文字和计算机中二进制的对应规定
字符集(编码表):一个零碎反对的所有字符的汇合
字节流与字符流之间的桥梁:能够 指定查问码表
OutputStreamWriter
InputStreamReader
转换流原理:
OutputStreamWriter
java.io.OutputStreamWriter extends Writer
用指定的 charset(编码表)将要写入流中的字符编码成字节 –> 编码
构造方法:
OutputStreamWriter(OutputStream out):创立默认 ** 字符编码 ** 的 OutputStreamWriter | |
OutputStreamWriter(OutputStream out,String charsetName):创立指定字符集的 OutputStreamWriter | |
参数:OutputStream out:字节输入流,能够用来写转换之后的字节到文件中 | |
String charsetName:指定编码表名称,不辨别大小写 |
应用步骤:
- 创立 OutputStreamWriter 对象,构造方法中传递字节输入流和指定编码表名称
- 应用 OutputStreamWriter 对象中 write 办法,把字符转换为字节存储到缓冲区
- 应用 OutputStreamWriter 对象中 flush 办法,把内存缓冲区中的字节刷新到文件中(应用字节流写字节过程)
- 开释资源
public static void main(String[] args) throws IOException {write_utf_8(); | |
} | |
private static void write_utf_8() throws IOException {OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("E:\\A JI\\program\\java\\z.txt"), "utf-8"); | |
osw.write("你好"); | |
osw.flush(); | |
osw.close();} |
public static void main(String[] args) throws IOException {// write_utf_8(); | |
write_gbk();} | |
private static void write_gbk() throws IOException {OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("E:\\A JI\\program\\java\\gbk.txt"), "GBK"); | |
osw.write("你好"); | |
osw.flush(); | |
osw.close();} |
OutputStreamReader
java.io.InputStreamReader extends Reader
用指定的 charset(编码表)读取字节并将其解码为字符 –> 解码
构造方法:
InputStreamReader(IntputStream in):创立默认 ** 字符集 ** 的 OutputStreamReader | |
InputStreamReader(InputStream in,String charsetName):创立指定字符集的 InputStreamReader | |
参数:IntputStream in:字节输出流,用来读取文件中保留的字节 | |
String charsetName:指定编码表名称,不辨别大小写 |
应用步骤:
- 创立 InputStreamReader 对象,构造方法中传递字节输出流和指定编码表名称
- 应用 InputStreamReader 对象中 read 办法,读取文件
- 开释资源
注意事项:
构造方法中指定的编码表名称要和文件的编码雷同
public static void main(String[] args) throws IOException {read_utf_8(); | |
read_gbk();} | |
private static void read_gbk() throws IOException {InputStreamReader isr = new InputStreamReader(new FileInputStream("E:\\A JI\\program\\java\\GBK.txt"), "GBK"); | |
int len = 0; | |
while((len = isr.read()) != -1) {System.out.println((char) len); | |
} | |
isr.close();} | |
private static void read_utf_8() throws IOException {InputStreamReader isr = new InputStreamReader(new FileInputStream("E:\\A JI\\program\\java\\z.txt"), "utf-8"); | |
int len = 0; | |
while((len = isr.read()) != -1) {System.out.println((char) len); | |
} | |
isr.close();} |
案例
将 GBK 编码的文件,转换为 utf- 8 编码的文本文件
public static void main(String[] args) throws IOException { | |
// 先将 GBK 文件中数据转换为字节,应用 InputStreamReader | |
InputStreamReader isr = new InputStreamReader(new FileInputStream("E:\\A JI\\program\\java\\gbk.txt"), "GBK"); | |
// 定义 utf- 8 文件,筹备存储以 utf- 8 格局编码的 | |
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("E:\\A JI\\program\\java\\utf.txt"), "utf-8"); | |
int len = 0; | |
while((len = isr.read()) != -1) {osw.write(len); | |
} | |
osw.close(); | |
isr.close();} |
正文完