字节流和字符流的区别

      以stream结尾都是字节流,以reader和writer结尾都是字符流,两者的区别就是读写的时候一个是按字节读写,一个是按字符。在实际使用时差不多。

      在读写文件需要对内容按行处理,比如比较特定字符,处理某一行数据的时候一般会选择字符流。只是读写文件,和文件内容无关的,一般选择字节流。


package input;

import java.io.ByteArrayInputStream;

import java.io.IOException;

// 输入字节流InputStream的实现

// 字节数组作为输入源——ByteArrayInputStream

//

// 该类包括两个构造方法

//

// ByteArrayInputStream(byte[] buf);

// ByteArrayInputStream(byte[] buf,int offset,int length );

// 该类重写了InputStream中的所有方法,因此我们可以调用其父类同名的方法进行读写操作。

//

// 下面是如何通过一个字节数组创建字节输入流的过程,并从输入流中读取数据输出到操作台。

public class TestByteArrayInputStream1 {

    public static void main(String[] args) throws IOException {

        // 初始化字节数组

        byte[] buf = new byte[3];

        buf[0] = 100;

        buf[1] = 101;

        buf[2] = 102;

        // 创建输入流

        ByteArrayInputStream input = new ByteArrayInputStream(buf);

        // 从输入流中读取数据

        byte[] out = new byte[3];

        input.read(out);

        System.out.println(new String(out));

        // 关闭输入流

        input.close();

//         只能读取指定的字节数,不能读取的数据过多,有可能会超过内存的限制

    }

}


package com.qfedu.c_reader;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.IOException;

/*

  IO input Output


  字节流:

  InputStream

  FileInputStream

  OutputStream

  FileOutputStream


  字符流:

  字符流 = 字节流  + 解码


  字符流读取数据,输入字符流

  ---| Reader 输入字符流的基类/超类  抽象类

  ------| FileReader 读取文件的输入字符流


使用方式:

1. 找到文件

判断文件是否存在,是否是一个普通文件

2. 建立FileReader读取通道

3. 读取数据

4. 关闭资源

*/

public class Demo1 {

public static void main(String[] args) throws IOException {

//readerTest2(); 

}

public static void readerTest2() throws IOException {

long start = System.currentTimeMillis();

// 1. 找到文件:

File file = new File("");

// 判断文件是否存在,是否是一个普通文件

if (!file.exists() || !file.isFile()) {

throw new FileNotFoundException();

}

// 2. 建立FileReder 输入字符流管道

FileReader fr = new FileReader(file);

//3.建立缓冲区,利用缓冲区读取数据, 创建字符数组作为缓冲区

int length = -1; //用于保存读取到的字符个数

char[] buffer = new char[1024];

while ((length = fr.read(buffer)) != -1) {

System.out.println(new String(buffer, 0, length));

}

//4. 关闭资源

fr.close();

long end = System.currentTimeMillis();

System.out.println("耗时:" + (end - start));

}

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容