索鸟网

  1. 首页
  2. java文件传输基础:字节字符流的转换OutputStreamWriter/InputStreamReader

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


字符流
今天我们来讲解一下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,此时同样可以正确读取文件

来源地址:http://blog.csdn.net/mrs_wu/article/details/78230226 版权归作者所有!

相关教程

  • Java IO学习笔记三

    Java IO学习笔记三 在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换类。 OutputStreamWriter:是Writer的子类,将输出的字符流变为字节流,即:将一个字符流的输出对象变成字节流的输出对象。 InputStreamReader:是Reader的子类,将输入的字节流变为字符流,即
  • Java-IO(五)——字符流进阶及BufferedWriter、BufferedReader

    一、字符流和字节流的区别 拿一下上一篇文章的例子: public static void main(String[] args) { File file = new File("E:" + File.separator + "testFile" + File.separator + "testWriter.txt");
  • Java-------字符流和字节流(III)

    字符流 1) 编码问题 2)认识文本和文本文件 java的文本(char)是16位无符号整数,是字符的unicode编码(双字节编码) 文件是byte byte byte ...的数据序列 文本文件是文本(char)序列按照某种编码方案(utf-8,utf-16be,gbk)序列化为byte的存储结果 3)字符流(Reader Writer)---->操作的是文本
  • 1、转换流 2、缓冲流

    01转换流概述 * A: 转换流概述 * a: 转换流概述 * OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字节 * 将字符串按照指定的编码表转成字节,在使用字节流将这些字节写出去 02转换流_字符转字节的过程 * A: 转换流_字符转
  • 字节流,字节缓冲流,字符缓冲流,内存操作流,字节打印流,序列化流,递归

    File 类: 是操作系统中,文件和目录(文件夹)的抽象表示形式 构造方法: public File(String pathname) public File(String parent,String child) public File(File parent,String child) 成员方法: 创建功能 public boolean createNewFile(
  • Java I/O流

    文件的读写是java i/o流常用的也是最基础的操作,然而字节流,字符流,InputStream,OutpurStream,Reader,Writer等等,各种各样的流操作类傻傻分不清楚,今天我们就对常用的流操作做简单的总结。本文力求简洁,不至于看到大量的代码觉得困倦。 字节流/字符流表 分类 字节输入流 字节输出流 字符输入流 字符输出流 抽
  • 【209天】黑马程序员27天视频学习笔记【Day21-下】

    叨逼叨两句 想做NB程序员,还是不要喝酒为妙。 21-(12-13):使用指定码表读写字符+转换流图解 每个文件都有对应的编码,若你用不同的编码表去读取文件,就会乱码。 字符流FileReader、FileWriter都采用默认编码表。直接用来读取文件内容,会用默认编码表进行转换,不成功,写出的文件就乱码,所以还是用字节流FileInputStream
  • 字节流转换为字符流

    //将字节流转换为字符流 public String streamtoString(InputStream inputStream,String charset){ //inputStream。。获取到的数据;;;charset。。。编码 try { InputStreamReader inputStreamReader=new InputStreamReader(