출력 스트림에 문자열 쓰기
몇 개의 출력 리스너를 실장하고 있습니다.OutputStream
. 이것은, 다음의 어느쪽이든 상관없습니다.PrintStream
stdout 또는 파일에 쓰거나 메모리 또는 다른 출력처에 쓸 수 있습니다.따라서 지정했습니다.OutputStream
그 방법의 인수로서
자, 저는 이제String
여기 스트림에 쓰는 가장 좋은 방법은 무엇입니까?
그냥 쓸까요?Writer.write(message.getBytes())
바이트를 지정할 수 있지만 대상 스트림이 문자 스트림일 경우 자동으로 변환됩니까?
대신 여기 브릿지 스트림을 사용해야 하나요?
스트림(InputStream
그리고.OutputStream
) 바이너리 데이터를 전송합니다.스트림을 스트림에 쓰려면 먼저 스트림을 바이트로 변환해야 합니다.즉, 스트림을 인코딩해야 합니다.이 조작은, (제안대로) 를 사용해 수동으로 실시할 수 있습니다.String.getBytes(Charset)
방법은 피해야 합니다.String.getBytes()
이 방법에서는 JVM의 기본 인코딩을 사용하기 때문에 휴대용 방식으로 확실하게 예측할 수 없습니다.
단, 문자 데이터를 스트림에 쓰는 일반적인 방법은 스트림을 (또는 ) 메서드를 호출할 때 변환을 수행하는 (종종 )로 랩하는 것입니다.InputStreams에 대응하는 래퍼는 Reader입니다.
PrintStream
특별하다OutputStream
스트링을 자동으로 인코딩하는 메서드도 포함되어 있습니다(내부에서는 라이터를 사용합니다).하지만 그것은 여전히 개울이다.스트림을 작가와 함께 안전하게 포장할 수 있습니다.PrintStream
또는 다른 스트림 구현도 가능합니다.이중 부호화의 위험은 없습니다.
OutputStream을 사용하는 PrintWriter의 예:
try (PrintWriter p = new PrintWriter(new FileOutputStream("output-text.txt", true))) {
p.println("Hello");
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
OutputStream은 바이트를 쓰고 String은 문자를 제공합니다.문자열을 바이트[]로 인코딩하려면 Charset을 정의해야 합니다.
outputStream.write(string.getBytes(Charset.forName("UTF-8")));
바꾸다UTF-8
원하는 문자 집합으로 이동합니다.
OutputStream을 랩핑한 PrintStream을 생성하여 Print(String)라고 부를 수 있습니다.
final OutputStream os = new FileOutputStream("/tmp/out");
final PrintStream printStream = new PrintStream(os);
printStream.print("String");
printStream.close();
설계상으로는 다음과 같습니다.
OutputStream out = ...;
try (Writer w = new OutputStreamWriter(out, "UTF-8")) {
w.write("Hello, World!");
} // or w.close(); //close will auto-flush
OutputStream을 PrintWriter로 랩하고 해당 클래스의 인쇄 메서드를 사용합니다.그들은 현악기를 가지고 당신을 위해 일을 합니다.
Apache Commons IO를 사용할 수 있습니다.
try (OutputStream outputStream = ...) {
IOUtils.write("data", outputStream, "UTF-8");
}
언급URL : https://stackoverflow.com/questions/4069028/write-string-to-output-stream
'programing' 카테고리의 다른 글
Java는 Mockito를 사용하여 비활성 메서드 호출을 n회 확인합니다. (0) | 2022.08.28 |
---|---|
여기서 JAVA_는MacOS Mojave(10.14)에서 Lion(10.7)으로 홈. (0) | 2022.08.28 |
Vuex에서 상태를 정규화하는 방법 (0) | 2022.08.28 |
고정 크기 부동 소수점 유형 (0) | 2022.08.28 |
VueJ에서는 핸섬 가능, 페이지 새로고침 시에만 테이블 로드 가능 (0) | 2022.08.28 |