Преобразование Содержимого ByteArrayInputStream В Строку
я прочитала этот пост но я не понимаю. Я видел этой но не видели надлежащего примера преобразования ByteArrayInputStream
до String
С помощью ByteArrayOutputStream
.
чтобы получить содержимое ByteArrayInputStream
Как String
, С помощью ByteArrayOutputstream
рекомендуется или есть более предпочтительный способ?
я рассматривал и продлить ByteArrayInputStream
и использовать оформителя для увеличения функциональности при беге время. Любой интерес к этому является лучшим решением для использования ByteArrayOutputStream
?
4 ответов
A 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
затем прочитайте данные из сканера, проверьте этот пример:
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