BufferedWriter

All lectures for KO purposes
레벨 1 , 레슨 654
사용 가능

프로그램에는 파일이나 다른 곳에 데이터를 빠르게 쓰기 위한 요구 사항이 포함되는 경우가 많습니다. 그리고 이것은 질문을 제기합니다. 우리는 이것을 어떻게 해야 합니까? 어떤 클래스를 선택해야 할까요? 오늘 우리는 이 역할에 적합한 후보자인 BufferedWriter 클래스 를 알게 될 것입니다 .

BufferedWriter가 필요한 이유는 무엇입니까?

BufferedWriter는 버퍼링된 문자를 스트림에 쓰는 클래스입니다. 물리적 미디어에 액세스하는 횟수를 줄일 수 있습니다. 즉, 매번 하나의 문자를 쓰는 것이 아니라 버퍼에 데이터를 쓴 다음 모든 문자를 한 번에 매체에 씁니다.

이것은 쓰기 속도를 크게 증가시킵니다. 기본 버퍼 크기는 8192자이지만 생성자에서 새 크기를 지정하여 변경할 수 있습니다.


BufferedWriter(Writer in, int sz)

여기서 생성자의 첫 번째 인수는 작성하는 데이터를 수신할 스트림입니다. 그리고 sz 가 새 버퍼의 크기라는 것이 밝혀졌습니다 .

Java에는 BufferedReader 클래스도 있습니다. 이 클래스는 버퍼링된 데이터 읽기에 사용됩니다.

버퍼란 정확히 무엇입니까? 실제 예를 들어 보겠습니다. 버퍼는 슈퍼마켓의 바구니나 쇼핑 카트와 같습니다. 하나의 품목을 가지고 계산대로 걸어가서 지불하고 차 트렁크에 넣은 다음 다른 품목을 위해 다시 오는 대신 쇼핑 카트를 가지고 원하는 모든 것을 넣은 다음 지불할 수 있습니다. 계산대에서. 이것이 바로 버퍼가 작동하는 방식입니다. 데이터를 수집한 다음 각 조각을 별도로 쓰는 대신 모든 것을 가져와서 씁니다.

BufferedWriter 클래스의 생성자 및 메서드

이제 BufferedWriter 클래스를 자세히 살펴보겠습니다 . 객체를 생성하기 위한 두 가지 생성자가 있습니다.


public BufferedWriter(Writer out) 
public BufferedWriter(Writer out, int sz)

두 생성자 모두에서 out은 쓸 스트림이고 sz 는 이미 언급한 대로 버퍼의 크기입니다.

BufferedWriter 클래스 에는 여러 메서드도 있습니다. 오늘 그 중 일부를 자세히 살펴보겠습니다.

쓰기(문자[] 배열) 버퍼에 char 배열을 씁니다.
write(String s, int off, int len) 문자열의 일부를 버퍼에 씁니다.
추가(문자 C) 버퍼에 문자 쓰기
추가(CharSequence csq, int 시작, int 끝) 배열의 일부를 버퍼에 씁니다.
newLine() 줄 구분 기호를 씁니다.
플러시() 스트림을 플러시합니다.

파일에 값을 쓰는 프로그램을 작성해 봅시다. 을 위해작가매개변수, 우리는FileWriter생성자에게. 텍스트 파일을 작성하는 데 사용되며 개체를 초기화하는 여러 생성자가 있습니다.

FileWriter(파일 파일)
FileWriter(파일 파일, 부울 추가)
FileWriter(FileDescriptor fd)
FileWriter(문자열 파일 이름)
FileWriter(문자열 파일 이름, 부울 추가)

이 예에서는 파일 이름을 사용하는 생성자를 사용합니다.


try(BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("file.txt"))){
	
	String message = "Hello, Amigo! This is a very important message!";
	bufferedWriter.write(message);
	bufferedWritter.flush();
}
catch(IOException ex){
System.out.println(ex.getMessage());
 }

우리 코드는 write(String str) 메서드를 사용하여 str을 file.txt 파일 에 씁니다 .

다음과 같은 다른 작성 방법이 있습니다.

  • write(char[] array ) — 이 변형은 char 배열을 받아 씁니다 .

  • write(String s, int off, int len) — 이 변형은 문자열 s를 취합니다 . 쓰기를 시작할 문자의 인덱스인 오프셋 off ; len 기록할 문자열(하위 문자열)의 길이입니다.


try(BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("file.txt"))){
	String message = "Hello, Amigo! This is a very important message!";
	bufferedWriter.write(message, 0, 11);
 	bufferedWriter.flush();

} catch(IOException ex) {
System.out.println(ex.getMessage());
}

이 코드는 파일에 "Hello, Amig"를 쓸 것입니다. 메서드에 인덱스 0부터 시작하여 11자를 쓰도록 지시했기 때문입니다.

우리 코드에는 try-with 리소스 블록 도 있습니다 .


try(BufferedWriter bufferedWritter = new BufferedWriter(new FileWriter("file.txt"))) 

이것은 close() 메서드가 내 컴퓨터에서 자동으로 호출됨을 의미합니다.bufferedWriterAutoCloseable 인터페이스를 구현하기 때문입니다 .

코드의 flush() 메서드는 출력 스트림을 플러시하여 버퍼링된 모든 바이트를 강제로 작성하는 데 사용 됩니다 . 버퍼를 플러시해야 하고 버퍼링된 바이트를 써야 함을 나타내기 때문에 이 호출 없이는 쓰기가 발생하지 않을 수 있습니다.

BufferedWriter 클래스에는 메시지에 새 줄을 추가하는 newLine() 메서드 있습니다 .


try (BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("file.txt"))) {
        String message = "Hello, Amigo! This is a very important message!";
        bufferedWriter.write(message, 0, 13);
        bufferedWriter.newLine();
        bufferedWriter.write(message, 15, 33);
    } catch (IOException ex) {
        System.out.println(ex.getMessage());
    }

파일에서 다음을 얻습니다.

안녕, 아미고!
이것은 매우 중요한 메시지입니다!

append() 메서드 의 서명은 다음과 같습니다.


public Writer append(CharSequence csq, int start, int end)

csq 를 추가하는 데 사용됩니다 . 여기서 start 는 첫 번째 문자의 인덱스이고 end 는 삽입할 문자열(또는 하위 문자열)의 마지막 문자 인덱스입니다. 인덱스 끝이 있는 문자는 삽입되지 않습니다.


try (BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("file.txt"))) {
    String message = "Hello, Amigo! This is a very important message!";
    bufferedWriter.append(message, 0, 7);
    bufferedWriter.flush();
} catch (IOException ex) {
    System.out.println(ex.getMessage());
}

이 코드는 다음을 제공합니다.

안녕하세요,

즉, 추가 방법을 사용하여 버퍼에 추가할 문자열 부분을 지정합니다.

write()append() 의 차이점을 자세히 살펴보면 먼저 둘 다 원칙적으로 동일한 작업을 수행한다는 것을 알 수 있습니다. 즉, 값을 씁니다.

그러나 차이점은 추가 방법이 더 새롭고 CharSequence를 인수로 사용하며 String이 CharSequence를 구현하기 때문에 StringsStringBuildersStringBuffers를 추가 방법 에 전달할 수 있다는 것입니다 . 그러나 write() 메서드는 String 만 허용합니다 .

지금은 그게 다야! 오늘 우리는 버퍼, 파일에 버퍼링된 쓰기를 수행하는 방법 및 이를 수행하는 데 사용할 수 있는 방법에 대해 알아보았습니다.

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION