문제

나는 읽었다 이 게시물 하지만 나는 따르지 않습니다.나는 보았다 이것 하지만 변환하는 적절한 예를 본 적이 없습니다. ByteArrayInputStream 에게 String 사용하여 ByteArrayOutputStream.

내용을 검색하려면 ByteArrayInputStream 로서 String, 은(는) 다음을 사용 중입니다. ByteArrayOutputstream 권장되는 방법이 있습니까? 아니면 더 바람직한 방법이 있습니까?

나는 고려하고 있었다 이 예 연장하고 ByteArrayInputStream 그리고 활용 데코레이터 런타임 시 기능을 향상합니다.이것이 고용에 대한 더 나은 솔루션이라는 것에 대한 관심 ByteArrayOutputStream?

도움이 되었습니까?

해결책

ByteArrayOutputStream 무엇이든 읽을 수 있습니다 InputStream 그리고 결국에는 byte[].

그러나 ByteArrayInputStream 그것은 더 간단합니다:

int n = in.available();
byte[] bytes = new byte[n];
in.read(bytes, 0, n);
String s = new String(bytes, StandardCharsets.UTF_8); // Or any encoding.

에 대한 ByteArrayInputStream available() 총 바이트 수를 산출합니다.


댓글에 대한 답변:ByteArrayOutputStream 사용

ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buf = new byte[8192];
for (;;) {
    int nread = in.read(buf, 0, buf.length);
    if (nread <= 0) {
        break;
    }
    baos.write(buf, 0, nread);
}
in.close();
baos.close();
byte[] bytes = baos.toByteArray();

여기에는 임의의 InputStream이 있을 수 있습니다.

다른 팁

왜 아무도 언급하지 않았나요? org.apache.commons.io.IOUtils?

import java.nio.charset.StandardCharsets;
import org.apache.commons.io.IOUtils;

String result = IOUtils.toString(in, StandardCharsets.UTF_8);

코드 한 줄이면 충분합니다.

사용 Scanner 생성자에게 전달합니다. ByteArrayInputStream 그런 다음 Scanner 에서 데이터를 읽고 다음 예를 확인하십시오.

ByteArrayInputStream arrayInputStream = new ByteArrayInputStream(new byte[] { 65, 80 });
Scanner scanner = new Scanner(arrayInputStream);
scanner.useDelimiter("\\Z");//To read all scanner content in one String
String data = "";
if (scanner.hasNext())
    data = scanner.next();
System.out.println(data);

Base64 인코딩 사용

ByteArrayOutputStream을 얻었다고 가정합니다.

ByteArrayOutputStream baos =...
String s = new String(Base64.Encoder.encode(baos.toByteArray()));

보다 http://docs.oracle.com/javase/8/docs/api/java/util/Base64.Encoder.html

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