热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java文件传输基础:字节字符流的转换OutputStreamWriter/InputStreamReader

字符流今天我们来讲解一下java文件传输基础中的字符流的操作,首先要对一下几个问题有所了解:1、编码问题2、认识文本和文本文件:java中的文本(char)其实是一个十六位无符号的

字符流
今天我们来讲解一下java文件传输基础中的字符流的操作,首先要对一下几个问题有所了解:
1、编码问题
2、认识文本和文本文件:
java中的文本(char)其实是一个十六位无符号的整数,是字符unicode编码(双字节编码),文件byte byte byte的数据系列。文本文件则是文本(char)序列按照某种编码方案(utf-8 utf-16be gbk)序列化为byte的存储结果
3、字符流(Reader Writer)——操作的是文本,文本文件,默认按照gbk编码解析。字符流一次处理一个字符,字符的底层仍然是基本的字节序列
4、字符流的基本实现InputStreamReader完成byte解析为char流,按照编码解析;OutputStreamWriter提供char流到byte流,按照编码处理
首先我们通过一个程序进行测试:

public static void main(String[] args) throws IOException {
FileInputStream in = new FileInputStream("D:\\log_network.txt");
InputStreamReader isr = new InputStreamReader(in, "utf-8");// 默认项目编码,文件编码
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("D:\\log_net.txt"), "utf-8");
char[] buf = new char[8 * 1024];
int a;
// 批量读取从第0个位置放入buf字符数组中的字符
while ((a = isr.read(buf, 0, buf.length)) != -1) {
String s = new String(buf, 0, a);
System.out.println(s);
osw.write(buf, 0, a);//将数组内容写入文件
osw.flush();
}
osw.close();
isr.close();
}

运行结果为文件内容被输出,并且文件内容拷贝成功
       该项目中涉及到的编码问题如下:
       1、java项目的默认编码为GBK,中文机器中的文本文件编码为ANSI(ANSI为为了适应各国语言不同而产生的编码,在中文中,ANSI对应的编码为GBK),因此我们利用项目默认编码按照字符流来读取文本文件是成功的
       2、现我们创建一个UTF-8编码的文本文件,此时用项目默认编码GBK来进行解析会出现乱码现象。因此,我们指定读取文件时的编码方式也为UTF-8,此时同样可以正确读取文件


推荐阅读
author-avatar
我有点懂了_707
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有