IT이야기

문자열에 출력 스트림 가져오기

cyworld 2022. 6. 4. 08:13
반응형

문자열에 출력 스트림 가져오기

java.io에서 출력을 파이핑하는 가장 좋은 방법은 무엇입니까?문자열에 대한 출력 스트림(Java)

예를 들어 다음과 같은 방법이 있습니다.

  writeToStream(Object o, OutputStream out)

오브젝트의 특정 데이터를 지정된 스트림에 씁니다.단, 이 출력을 가능한 한 쉽게 String으로 만들고 싶습니다.

다음과 같은 수업(미검증)을 작성할까 생각 중입니다.

class StringOutputStream extends OutputStream {

  StringBuilder mBuf;

  public void write(int byte) throws IOException {
    mBuf.append((char) byte);
  }

  public String getString() {
    return mBuf.toString();
  }
}

하지만 더 좋은 방법은 없을까?테스트만 하면 돼!

를 사용하고 싶다.ByteArrayOutputStream종료 후 다음 연락처로 문의해 주십시오.

new String( baos.toByteArray(), codepage );

또는 그 이상:

baos.toString( codepage );

를 위해String컨스트럭터,codepage이 될 수 있다String또는 java.nio.charset 인스턴스입니다.Charset.가능한 값은 java.nio.charset 입니다.표준 문자 세트UTF_8.

방법toString()a만 받아들이다String로서codepage파라미터(스탠드 Java 8).

Apache Commons IO 라이브러리를 좋아합니다.버전의 ByteArrayOutputStream은toString(String enc)방법뿐만 아니라toByteArray()Commons 프로젝트와 같이 신뢰할 수 있는 기존 컴포넌트를 사용하면 코드를 더 작게 만들고 확장 및 용도 변경을 쉽게 할 수 있습니다.

이것은 잘 작동했다.

OutputStream output = new OutputStream() {
    private StringBuilder string = new StringBuilder();

    @Override
    public void write(int b) throws IOException {
        this.string.append((char) b );
    }

    //Netbeans IDE automatically overrides this toString()
    public String toString() {
        return this.string.toString();
    }
};

메서드 호출 =>>marshaller.marshal( (Object) toWrite , (OutputStream) output);

그런 다음 문자열을 인쇄하거나 가져오려면 "출력" 스트림 자체를 참조합니다. 예를 들어 문자열을 콘솔로 인쇄하려면 =>>System.out.println(output);

참고로 내 메서드 호출marshaller.marshal(Object,Outputstream)XML 관련 작업입니다.이 주제와는 무관합니다.

생산용으로 사용하기에는 낭비가 심하고, 변환이 너무 많고, 조금 느슨합니다.이것은 커스텀 OuputStream을 생성하여 문자열을 출력할 수 있음을 증명하기 위해 코드화된 것입니다.하지만 Horcrux7을 사용하면 두 번의 메서드 호출만으로 모든 것이 가능합니다.

그리고 세상은 다른 날에 살고 있다...

제가 하게 된 일은 다음과 같습니다.

Obj.writeToStream(toWrite, os);
try {
    String out = new String(os.toByteArray(), "UTF-8");
    assertTrue(out.contains("testString"));
} catch (UnsupportedEncondingException e) {
    fail("Caught exception: " + e.getMessage());
}

여기서 os는ByteArrayOutputStream.

baos.toString(StandardCharsets.UTF_8);

이름 있는 문자 집합을 사용하여 바이트를 디코딩하여 버퍼의 내용을 문자열로 변환합니다.

Java 17 - https://docs.oracle.com/

언급URL : https://stackoverflow.com/questions/216894/get-an-outputstream-into-a-string

반응형