programing

출력 스트림에 문자열 쓰기

copysource 2022. 8. 28. 21:13
반응형

출력 스트림에 문자열 쓰기

몇 개의 출력 리스너를 실장하고 있습니다.OutputStream. 이것은, 다음의 어느쪽이든 상관없습니다.PrintStreamstdout 또는 파일에 쓰거나 메모리 또는 다른 출력처에 쓸 수 있습니다.따라서 지정했습니다.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

반응형