java 20 - 9 带有缓冲区的字节输出流和字节输入流

由之前字节输入的两个方式,我们可以发现,通过定义数组读取数组的方式比一个个字节读取的方式快得多。

所以,java就专门提供了带有缓冲区的字节类:

缓冲区类(高效类)

写数据:BufferedOutputStream

    构造方法:

      BufferedInputStream(InputStream in) 创建一个 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。

      BufferedInputStream(InputStream in, int size) 创建具有指定缓冲区大小的 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。
读数据:BufferedInputStream

    构造方法:

      BufferedOutputStream(OutputStream out) 创建一个新的缓冲输出流,以将数据写入指定的底层输出流。

      BufferedOutputStream(OutputStream out, int size) 创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的底层输出流。

疑惑:

  例如:BufferedOutputStream(OutputStream out)
      为什么不传递一个具体的文件或者文件路径,而是传递一个OutputStream对象呢?
原因:

  字节缓冲区流仅仅提供缓冲区,为高效而设计的。但是呢,真正的读写操作还得靠基本的流对象实现。
 例子:  BufferedOutputStream:相当于水杯
      OutputStream:相当于水,解渴还得靠水

创建高效字节输出流对象,并输入数据

BufferedOutputStream out = new BufferedOutputStream(
                new FileOutputStream("c.txt"));

  // 输出数据
  out.write("javaIO".getBytes());

  out.close();

创建高校字节输入流对象,并输出数据

BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
                "bos.txt"));

byte[] bys = new byte[1024];
int len = 0;
while ((len = bis.read(bys)) != -1) {
System.out.print(new String(bys, 0, len));
}

// 释放资源
bis.close();

时间: 2024-12-14 18:47:27

java 20 - 9 带有缓冲区的字节输出流和字节输入流的相关文章

FileOutputStream字节输出流和FileInputStream输入流(切记:out是输出到本地中,in是输入到程序中)这里介绍大文件和小文件的读取方式

//FileOutputStream public class FileOutputStreamDemo { /**字节流:适用于任何文件,以字节为单位,进行读写操作  *字节流操作步骤:  *1.创建文件对象  *2.创建字节流  *3.读写操作  *4.关闭流  */ //字节流(写操作) public static void main(String[] args) { String messageString = "hello world";  byte[] bytes = me

java 12 - 5 带有缓冲区的字符流

字符流为了高效读写,也提供了对应的字符缓冲流. 字符缓冲流:A. BufferedWriter:字符缓冲输出流 B. BufferedReader:字符缓冲输入流 A.BufferedWriter:字符缓冲输出流将文本写入字符输出流,缓冲各个字符,从而提供单个字符.数组和字符串的高效写入.  可以指定缓冲区的大小,或者接受默认的大小.在大多数情况下,默认值就足够大了. 1 // 字符缓冲输入流 2 BufferedWriter bw = new BufferedWriter(new Output

java 20 - 5 字节输出流写出数据的一些方法

首先回顾下 字节输出流操作步骤:  A:创建字节输出流对象  B:调用write()方法  C:释放资源 创建字节流输出对象 FileOutputStream fos = new FileOutputStream("fos.txt"); 先介绍字节输出流的write方法: public void write(int b):写一个字节 public void write(byte[] b):写一个字节数组 public void write(byte[] b,int off,int le

java 20 - 7 字节输入流的操作

字节输入流操作步骤: A:创建字节输入流对象 B:调用read()方法读取数据,并把数据显示在控制台 C:释放资源 步骤A.C 略过,说步骤B  读取数据的方式:  A:int read():一次读取一个字节  B:int read(byte[] b):一次读取一个字节数组 要想进行字节输入流的操作,我得先创建一个文件,并用字节输出流输出内容到这个文件里面: 1 //首先我创建一个txt文件,并输出内容 2 File file = new File("a.txt"); 3 4 //用字

java: InputStreamReader将字节的输入流变成字符的输入流,OutputStreamWriter将字符的输出流变成字节的输出流

InputStreamReader:将字节的输入流变成字符的输入流, OutputStreamWriter:将字符的输出流变成字节的输出流 //将缓冲区的内容读取,可以一次读取 //可以接收键盘的输入内容:需要用到字节转字符流的方法:InputStreamReader,OutputStreamWriter //BufferedReader BufferedReader buf = null; //将字节的输入流变成字符的输入流 //InputStreamReader buf = new Buff

使用带缓冲区的输入输出流的速度会大幅提高

过滤流: bufferedOutputStream bufferedInputStream 用于给节点流增加一个缓冲的功能. 在VM的内部建立一个缓冲区,数据先写入缓冲区,等到缓冲区的数据满了之后再一次性写出,效率很高. 使用带缓冲区的输入输出流的速度会大幅提高,缓冲区越大,效率越高.(这是典型的牺牲空间换时间) 切记:使用带缓冲区的流,如果数据数据输入完毕,使用flush方法将缓冲区中的内容一次性写入到外部数据源.用close()也可以达到相同的效果,因为每次close都会使用flush.一定

字节输出流-FileOutputStream

IO-字节输出流-FileOutputStream 字节流 基本操作与字符流相同 但是它不仅可以操作字符,还可以操作其他的媒体文件 例程一个Jpg文件 java.io 类 OutputStream public abstract class OutputStream 此抽象类是表示输出字节流的所有类的超类. java.io 类 FileOutputStream public class FileOutputStream  extends OutputStream 字节流使用的是字节数组缓存区 F

JAVA 20 键盘输入

字符流 FileReader FileWriter BufferedReader BufferedWriter OutputStreamWriter InputStreamReader 字节流 FileInputStream FileOutputStream BufferedInputStream BufferedOutputStream 系统输入: InputStream in =System.in; OutputStream out = System.out; 读取转换流: 定义在字符流体系

java 20 - 8 字节流的文件复制以及汉字在计算机中的存储方式

复制文本文件:把当前目录下的FileIntputStream.java文件里面的内容复制到当前目录的b.txt文件中 分析: 数据源: FileIntputStream.java -- 读取数据 -- FileInputStream 目的地: b.txt --- 写入数据 ---- FileOutputStream 思路:首先读取数据源的内容,然后把读取到的内容再写入到目的地中 前提:数据源存在,否则会报错 1 import java.io.FileInputStream; 2 import j