标签:port new 两种 row 默认 off 字符流 == 添加
字节流是由字节组成的,字符流是有字符组成的。java里字符有两个字节组成的,字节流是最基本的。所有的InputStream和OutputStream的子类都是主要处理二进制数据
的。
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不能创建对象,但是它里面定义了一些共性的方法。
FileInputStream 从文件系统中的某个文件中获得输入字节。既然继承了父类InputStream,则就可以使用父类中定义的方法。此FileInputStream可以实例化对象。
class FileInputStream extends InputStream
InputStream file = new FileInputStream(new File("F:\\ioTest\\1.txt"));
InputStream file = new FileInputStream("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;
// 测试字节流读取的过程
//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 时,会创建一个内部缓冲区数组,减少了和程序的交互次数,提高了程序的执行效率。这比运送东西,FileInputStream好比一个人开着小车送,BufferedInputStream好比一个人开着大卡车运送,肯定后者效率高。
private static int DEFAULT_BUFFER_SIZE = 8192; //默认大小8kb
private static int MAX_BUFFER_SIZE = Integer.MAX_VALUE - 8;
protected volatile byte buf[];
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();
}
}
标签:port new 两种 row 默认 off 字符流 == 添加
原文地址:https://www.cnblogs.com/love-programming/p/12416597.html