ByteArrayInputStream의 내용을 문자열로 변환
-
26-12-2019 - |
문제
나는 읽었다 이 게시물 하지만 나는 따르지 않습니다.나는 보았다 이것 하지만 변환하는 적절한 예를 본 적이 없습니다. 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