문제

java.io.outputstream에서 java의 문자열로 출력을 파이프하는 가장 좋은 방법은 무엇입니까?

방법이 있다고 말합니다.

  writeToStream(Object o, OutputStream out)

객체에서 특정 스트림으로 특정 데이터를 작성합니다. 그러나이 출력을 가능한 한 쉽게 문자열로 만들고 싶습니다.

나는 이와 같은 수업을 작성하는 것을 고려하고 있습니다.

class StringOutputStream extends OutputStream {

  StringBuilder mBuf;

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

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

그러나 더 좋은 방법이 있습니까? 나는 단지 시험을 실행하고 싶다!

도움이 되었습니까?

해결책

나는 a를 사용할 것이다 ByteArrayOutputStream. 그리고 마무리하면 다음에 전화 할 수 있습니다.

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

또는 더 나은

baos.toString( codepage );

문자열 생성자의 경우 codepage 문자열 또는 인스턴스 일 수 있습니다 java.nio.charset.charset. 가능한 가치는입니다 java.nio.charset.standardcharsets.utf_8.

Tostring 방법은 문자열 만 동기합니다 codepage 매개 변수 (Stand Java 8).

다른 팁

나는 Apache Commons IO 라이브러리를 좋아합니다. 버전을 살펴보십시오 BytearRayoutputStream, 여기에는 a toString(String enc) 방법과 방법 toByteArray(). Commons Project와 같은 기존 및 신뢰할 수있는 구성 요소를 사용하면 코드가 작고 확장 및 용도 변경이 쉽습니다.

이것은 훌륭하게 작동했습니다

    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과 함께 일하는 것입니다. 이 주제와 관련이 없습니다.

이것은 생산 사용에 대해 매우 낭비이며 너무 많은 전환 방법이 있으며 약간 느슨합니다. 이것은 방금 사용자 정의 OUPTREAM을 만들고 문자열을 출력하는 것이 완전히 가능하다는 것을 증명하기 위해 코딩되었습니다. 그러나 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는 a ByteArrayOutputStream.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top