byte api java_java-API之字节流

字节流读取

字节流是由字节组成的,字符流是有字符组成的。java里字符有两个字节组成的,字节流是最基本的。所有的InputStream和OutputStream的子类都是主要处理二进制数据的。

InputStream抽象类及其子类

InputStream类是一个抽象类,是表示字节输入的所有类的超类/抽象类。源码如下:

public abstract class InputStream{}

public class FileInputStreamextends InputStream{}

// BufferedInputStream类继承于FilterInputStream类,FilterInputStream类继承于InputStream类,所以BufferedInputStream类还是InputStream类的子类

public class FilterInputStream extends InputStream{}

public class BufferedInputStream extends FilterInputStream{}

InputStream类的方法

虽然抽象类InputStream不能创建对象,但是它里面定义了一些共性的方法。

abstract int read() 从输入流中读取数据的下一个字节。

int read(byte[] b)从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。

int read(byte[] b, int off, int len)将输入流中最多 len 个数据字节读入 byte 数组。

void close() 关闭此输入流并释放与该流关联的所有系统资源。

FileInputStream 子类

FileInputStream 从文件系统中的某个文件中获得输入字节。既然继承了父类InputStream,则就可以使用父类中定义的方法。此FileInputStream可以实例化对象。

class FileInputStream extends InputStream

创建对象

构造1:FileInputStream(File file) 通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。

InputStream file = new FileInputStream(new File("F:\\ioTest\\1.txt"));

构造2:FileInputStream(String name) 通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。

InputStream file = new FileInputStream("F:\\ioTest\\1.txt");

FileInputStream类的测试

import java.io.BufferedInputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStream;

import java.util.Scanner;

// 测试字节流读取的过程

//BufferedInputStream要比FileInputStream效率高,因为BufferedInputStream底层维护了一个byte[]缓冲数据,数组满了之后才给程序依次,减少了和程交互的次数,提高了程序的执行效率

//byte[] 数组默认尺寸是8192字节

public class Test4_FileInputStream {

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

// 通过FileInputStream类读取文件

//FileInputStreamMethod();

}

/*

* 通过 FileInputStream(File file)创建字节流对象

* in.read() 字节流对象的读取方法,读取完是返回 -1

*/

private static void FileInputStreamMethod() throws IOException {

//1.创建字节读取流对象 两种创建对象的方式,都可以

InputStream in = new FileInputStream(new File("F:\\ioTest\\1.txt")); // 方法一

// InputStream in = new FileInputStream("F:\\ioTest\\1.txt"); // 方法二

//2.开始读取数据

do {

int data = in.read();

if(data == -1) { //当数据读取完毕时返回值为 -1

in.close(); //关闭此输入流并释放与该流关联的所有系统资源。

System.out.println("数据读完了");

break;

}

System.out.println(data);

}while(true);

}

}

BufferedInputStream 子类

BufferedInputStream为另一个输入流添加一些功能,在创建 BufferedInputStream 时,会创建一个内部缓冲区数组,减少了和程序的交互次数,提高了程序的执行效率。这比运送东西,FileInputStream好比一个人开着小车送,BufferedInputStream好比一个人开着大卡车运送,肯定后者效率高。

private static int DEFAULT_BUFFER_SIZE = 8192; //默认大小8kb

private static int MAX_BUFFER_SIZE = Integer.MAX_VALUE - 8;

protected volatile byte buf[];

BufferedInputStream类创建对象

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

InputStream in = new BufferedInputStream(new InputStream("F:\\\\ioTest\\\\1.txt"));

测试

import java.io.BufferedInputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStream;

import java.util.Scanner;

public class Test4_inputStream {

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

BufferedInputStreamMethod(); //使用高效的BufferedInputStream(InputStream in)

}

/*

* 使用具有缓存数组高效的BufferedInputStream类

*/

private static void BufferedInputStreamMethod() throws IOException {

// 1.创建字节读取对象

InputStream in = new BufferedInputStream(new FileInputStream("F:\\\\ioTest\\\\1.txt"));

//2.开始读取数据

int data = 0;

while((data = in.read()) != -1) {

System.out.println(data);

}

//3.释放资源

in.close();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值