English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Java BufferedInputStream 클래스
이 튜토리얼에서는 예제를 통해 Java BufferedInputStream 및 그 메서드를 배웁니다.
BufferedInputStream 클래스는 java.io 패키지와 함께 사용되어 데이터를 더 효율적으로 읽을 수 있습니다(바이트 단위로).
BufferedInputStream이 InputStream 추상 클래스를 상속합니다.8192바이트의 내부 버퍼.
BufferedInputStream에서 읽기 작업을 수행하는 동안, 디스크에서 일부 바이트를 읽어들이고 내부 버퍼에 저장합니다. 그런 다음 내부 버퍼에서 바이트를 순차적으로 읽습니다.
따라서 디스크와의 통신 횟수가 줄어듭니다. 이것이 BufferedInputStream을 사용하여 바이트를 읽을 때 더 빠른 이유입니다.
BufferedInputStream을 생성하기 위해 먼저 java.io.BufferedInputStream 패키지를 가져와야 합니다. 패키지를 가져온 후, 여기서 입력 스트림을 생성할 수 있습니다.
//FileInputStream을 생성합니다. FileInputStream file = new FileInputStream(String path); //创建一个BufferedInputStream BufferedInputStream buffer = new BufferedInputStream(file);
위의 예제에서는 BufferedInputStream의 이름을 BufferdInputStream으로 지정하고 FileInputStream의 이름을 file로 생성했습니다.
이 경우, 내부 버퍼의 기본 크기는8192바이트가 있지만, 내부 버퍼의 크기를 지정할 수도 있습니다.
//지정된 크기의 내부 버퍼를 가진 BufferedInputStream을 생성합니다 BufferedInputStream buffer = new BufferedInputStream(file, int size);
버퍼는 파일에서 바이트를 더 빠르게 읽는 데 도움이 됩니다.
BufferedInputStream 클래스는 InputStream 클래스에서 제공하는 다양한 메서드를 구현합니다.
read() - 입력 스트림에서 바이트를 읽습니다
read(byte[] arr) - 스트림에서 바이트를 읽고 지정된 배열에 저장합니다
read(byte[] arr, int start, int length) - stream에서 length 개의 바이트를 읽고 start 위치에서 지정된 배열에 저장합니다
이름이input.txt다음과 같은 내용을 포함한 파일이 있습니다.
This is a line of text inside the file.
파일을 읽는 BufferedInputStream을 사용해 보겠습니다.
import java.io.BufferedInputStream; import java.io.FileInputStream; class Main { public static void main(String[] args) { try { //FileInputStream을 생성합니다. FileInputStream file = new FileInputStream("input.txt"); //创建一个BufferedInputStream BufferedInputStream input = new BufferedInputStream(file); //파일에서 첫 번째 바이트를 읽습니다. int i = input.read(); while (i != -1) { System.out.print((char) i); //파일에서 다음 바이트를 읽습니다. i = input.read(); } input.close(); } catch(Exception e) { e.getStackTrace(); } } }
출력 결과
This is a line of text inside the file.
在上面的示例中,我们创建了一个名为buffer的缓冲输入流和FileInputStream。输入流与文件input.txt链接。
FileInputStream file = new FileInputStream("input.txt"); BufferedInputStream buffer = new BufferedInputStream(file);
在这里,我们使用了read()方法从缓冲读取器的内部缓冲区读取字节数组。
要获取输入流中可用字节的数量,我们可以使用available()方法。例如,
import java.io.FileInputStream; import java.io.BufferedInputStream; public class Main { public static void main(String args[]) { try { //假设input.txt文件包含以下文本 //这是文件中的一行文本。 FileInputStream file = new FileInputStream("input.txt"); //创建一个BufferedInputStream BufferedInputStream buffer = new BufferedInputStream(file); //返回可用的字节数 System.out.println("开始时可用的字节数: " + buffer.available()); //从文件中读取字节 buffer.read(); buffer.read(); buffer.read(); //返回可用的字节数 System.out.println("结束时的可用字节数: " + buffer.available()); buffer.close(); } catch(Exception e) { e.getStackTrace(); } } }
출력 결과
开始时可用的字节数: 39 结束时的可用字节数: 36
在以上示例中,
我们首先使用available()方法检查输入流中可用字节的数量。
然后,我们使用read()方法3次从输入流中读取3个字节。
现在,在读取字节之后,我们再次检查了可用字节。这一次可用字节减少了3。
要丢弃和跳过指定的字节数,可以使用skip()方法。例如
import java.io.FileInputStream; import java.io.BufferedInputStream; public class Main { public static void main(String args[]) { try { //假设input.txt文件包含以下文本 //这是文件中的一行文本。 FileInputStream file = new FileInputStream("input.txt"); //创建一个BufferedInputStream BufferedInputStream buffer = new BufferedInputStream(file); //건너뜁니다5个字节 buffer.skip(5); System.out.println("跳过5个字节后的输入流: "); //从输入流中读取第一个字节 int i = buffer.read(); while (i != -1) { System.out.print((char) i); //입력 스트림에서 다음 바이트를 읽습니다 i = buffer.read(); } //입력 스트림을 닫습니다 buffer.close(); } catch(Exception e) { e.getStackTrace(); } } }
출력 결과
건너뜁니다5바이트 후의 입력 스트림: is a line of text inside the file.
위의 예제에서 skip() 메서드를 사용하여 파일 입력 스트림에서5바이트. 따라서 입력 스트림에서 'T', 'h', 'i', 's' 및 공백을 건너뜁니다.
버퍼를 닫는 입력 스트림을 close() 메서드를 사용하여 닫을 수 있습니다. close() 메서드를 호출하면 입력 스트림에서 데이터를 읽을 수 없게 됩니다.
메서드 | 콘텐츠 설명 |
---|---|
mark() | 읽은 데이터 위치를 입력 스트림에 표시합니다 |
reset() | 컨트롤을 입력 스트림에 표시된 마커 포인트로 반환합니다 |