1. OutputStream
클래스
우리는 최근에 입력 스트림을 탐색했습니다. 이제 출력 스트림에 대해 이야기할 시간입니다.
이 OutputStream
클래스는 바이트 출력을 지원하는 모든 클래스의 상위 클래스입니다. 이것은 자체적으로는 아무 것도 수행하지 않는 추상 클래스이지만 모든 경우에 대한 하위 클래스가 있습니다.
매우 복잡하게 들립니다. 간단히 말해서 이 클래스는 예를 들어 문자나 다른 데이터 유형이 아닌 바이트에서 작동합니다. 그리고 그것이 추상적이라는 사실은 우리가 일반적으로 그것을 사용하지 않고 그 자손 클래스 중 하나를 사용한다는 것을 의미합니다. 예를 들어, FileOutputStream
등등.
그러나 OutputStream
수업으로 돌아갑니다. 이 클래스에는 모든 자손 클래스가 구현해야 하는 메서드가 있습니다. 주요 내용은 다음과 같습니다.
행동 양식 | 설명 |
---|---|
|
int 스트림에 1바이트( 가 아님)를 씁니다 . |
|
스트림에 바이트 배열을 씁니다. |
|
바이트 배열의 일부를 스트림에 씁니다. |
|
버퍼에 저장된 모든 데이터를 스트림에 씁니다. |
|
스트림을 닫습니다 |
를 상속하는 클래스의 개체를 만들 때 InputStream
일반적으로 데이터를 읽는 소스 개체를 지정합니다 InputStream
. 를 상속하는 클래스의 개체를 만들 때 OutputStream
일반적으로 데이터가 기록될 대상 개체 또는 스트림도 지정합니다.
클래스의 모든 메서드를 간단히 살펴보겠습니다 OutputStream
.
write(int b)
방법
int
이 메서드는 출력 스트림에 1바이트( 가 아님)를 씁니다 . 전달된 값은 바이트로 캐스팅되고 int의 처음 세 바이트는 버려집니다.
write(byte[] buffer)
방법
지정된 바이트 배열을 출력 스트림에 씁니다. 그게 다야.
write(byte[] buffer, int offset, int length)
방법
전달된 바이트 배열의 일부를 출력 스트림에 씁니다. 오프셋 변수는 배열의 첫 번째 요소의 인덱스를 나타내며 length
기록할 부분 집합의 길이입니다.
flush()
방법
이 flush()
메서드는 현재 스트림에 잠재적으로 버퍼링된 모든 데이터를 대상 스트림에 기록하는 데 사용됩니다. 이는 버퍼링 및/또는 체인에 배열된 여러 스트림 개체를 사용할 때 관련이 있습니다.
close()
방법
기록되지 않은 모든 데이터를 대상 개체에 씁니다. close()
블록 을 사용하는 경우 메서드를 호출할 필요가 없습니다 try-with-resources
.
파일 복사의 예
암호 | 메모 |
---|---|
|
InputStream 파일에서 읽기 OutputStream 위해 파일에 쓰기 위해 데이터를 읽을 버퍼 스트림에 데이터가 있는 한 버퍼로 데이터 읽기 버퍼에서 두 번째 스트림으로 데이터 쓰기 |
2. Writer
클래스
클래스 는 클래스 Writer
와 정확히 동일 OutputStream
하지만 한 가지 차이점이 있습니다. char
바이트 대신 문자( )로 작동합니다.
이것은 추상 클래스입니다. Writer
클래스의 개체를 만들 수 없습니다. 주요 목표는 수백 개의 하위 클래스에 대한 공통 상위 클래스가 되고 문자 스트림 작업을 위한 공통 메서드를 제공하는 것입니다.
클래스 의 메서드 Writer
(및 모든 하위 클래스):
행동 양식 | 설명 |
---|---|
|
int 스트림에 하나의 문자( 가 아님)를 씁니다 . |
|
스트림에 문자 배열을 씁니다. |
|
문자 배열의 일부를 스트림에 씁니다. |
|
스트림에 문자열을 씁니다. |
|
문자열의 일부를 스트림에 씁니다. |
|
버퍼에 저장된 모든 데이터를 스트림에 씁니다. |
|
스트림을 닫습니다 |
메소드는 클래스의 메소드와 매우 유사 OutputStream
하지만 바이트 대신 문자로 작동합니다.
방법 설명:
write(int b)
방법
이 메서드는 출력 스트림에 단일 문자( char
— 아님 )를 씁니다. int
전달된 값은 로 캐스트되고 char
처음 두 바이트는 버려집니다.
write(char[] buffer)
방법
지정된 문자 배열을 출력 스트림에 씁니다.
write(char[] buffer, int offset, int length)
방법
전달된 문자 배열의 일부를 출력 스트림에 씁니다. 변수 offset
는 배열의 첫 번째 요소의 인덱스를 나타내며 length
기록할 하위 집합의 길이입니다.
write(String str)
방법
주어진 문자열을 출력 스트림에 씁니다.
write(String str, int offset, int length)
방법
주어진 문자열의 일부를 출력 스트림에 씁니다. 문자열은 문자 배열로 변환됩니다. 변수 offset
는 배열의 첫 번째 요소의 인덱스를 나타내며 length
기록할 하위 집합의 길이입니다.
flush()
방법
이 flush()
메서드는 현재 스트림에 잠재적으로 버퍼링된 모든 데이터를 대상 스트림에 기록하는 데 사용됩니다. 이는 버퍼링 및/또는 체인에 배열된 여러 스트림 개체를 사용할 때 관련이 있습니다.
close()
방법
기록되지 않은 모든 데이터를 대상 개체에 씁니다. close()
블록 을 사용하는 경우 메서드를 호출할 필요가 없습니다 try-with-resources
.
텍스트 파일을 복사하는 프로그램의 예:
암호 | 메모 |
---|---|
|
Reader 파일에서 읽기 Writer 위해 파일에 쓰기 위해 데이터를 읽을 버퍼 스트림에 데이터가 있는 한 버퍼로 데이터 읽기 버퍼에서 두 번째 스트림으로 데이터 쓰기 |
StringWriter
수업
Writer
클래스를 상속하는 또 다른 흥미로운 클래스가 있습니다 StringWriter
. 여기에는 변경 가능한 문자열인 StringBuffer
객체가 포함됩니다. 그리고 개체에 무언가를 "쓸" 때마다 StringWriter
텍스트는 단순히 내부 버퍼에 추가됩니다.
예:
암호 | 메모 |
---|---|
|
대상 문자 스트림( StringWriter )이 생성됩니다. 문자열이 내부 버퍼에 기록됩니다. StringWriter 문자열이 내부 버퍼에 기록됩니다. StringWriter 객체의 내용을 문자열로 변환합니다. |
이 경우 StringWriter
클래스는 기본적으로 클래스에 대한 래퍼 StringBuffer
이지만 StringWriter
클래스는 스트림 클래스의 후손 Writer
이며 스트림 개체 체인에서 사용할 수 있습니다. 이것은 실제로 매우 유용한 속성입니다.
3. PrintStream
클래스
출력 스트림 클래스는 전달된 대상 스트림에 데이터를 쓰는 중간 스트림이 있는 체인에 넣을 수도 있습니다. 이러한 스트림의 상호 작용에 대한 일반적인 보기는 다음과 같습니다.
모든 중간 출력 스트림 중에서 가장 흥미롭고 다재다능한 것은 PrintStream
. 수십 개의 메소드와 많게는 12개의 생성자가 있습니다.
클래스 는 클래스를 PrintStream
상속하고 FilterOutputStream
클래스는 OutputStream
. 즉, 클래스는 자체 메서드 외에도 부모 클래스의 모든 메서드를PrintStream
가집니다 . 다음은 가장 흥미로운 것입니다.
행동 양식 | 설명 |
---|---|
|
전달된 개체를 문자열로 변환하고 대상 스트림에 출력합니다. |
|
전달된 개체를 문자열로 변환하고 대상 스트림에 출력합니다. 끝에 줄 바꿈을 추가합니다. |
|
대상 스트림에 줄 바꿈 문자를 출력합니다. |
|
형식 문자열과 전달된 인수를 기반으로 문자열을 구성하고 출력합니다. String.format() 방법 과 유사 |
그리고이 수십 가지 방법은 어디에 있습니까?
음, 매개 변수가 다른 다양한 변형 print()
및 메서드 가 있습니다 . println()
이 표에 요약할 수 있습니다.
이러한 방법은 이미 잘 알고 있기 때문에 여기서는 다루지 않겠습니다. 내가 무엇을 얻고 있는지 짐작할 수 있습니까?
기억나 System.out.println()
? 그러나 두 줄로 작성할 수 있습니다.
암호 | 콘솔 출력 |
---|---|
|
|
우리가 가장 좋아하는 명령은 클래스 의 정적 변수에 대한 메서드 호출입니다 . 그리고 이 변수의 타입은 .System.out.println()
println()
out
System
PrintStream
많은 CodeGym 레벨과 거의 모든 작업에서 PrintStream
알지도 못하는 사이에 클래스의 메서드를 호출해 왔습니다!
실용
Java에는 이라는 흥미로운 클래스가 있습니다 ByteArrayOutputStream
. 이 클래스는 를 상속하는 동적으로 증가하는 바이트 배열입니다 OutputStream
.
객체 ByteArrayOutputStream
와 PrintStream
객체는 다음과 같이 연결할 수 있습니다.
암호 | 설명 |
---|---|
|
메모리에 쓰기 버퍼 생성 개체 에 버퍼를 래핑 콘솔에 데이터 쓰기 배열을 문자열로 변환! 콘솔 출력: PrintStream
|
GO TO FULL VERSION