Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将ByteArrayInputStream的内容转换为字符串_Java_String_Bytearrayoutputstream_Bytearrayinputstream - Fatal编程技术网

Java 将ByteArrayInputStream的内容转换为字符串

Java 将ByteArrayInputStream的内容转换为字符串,java,string,bytearrayoutputstream,bytearrayinputstream,Java,String,Bytearrayoutputstream,Bytearrayinputstream,我读书,但我没有听懂。我已经看到但还没有看到使用ByteArrayInputStream将ByteArrayInputStream转换为String的正确示例 要将ByteArrayInputStream的内容检索为字符串,建议使用ByteArrayOutputstream还是有更可取的方法 我正在考虑通过tearrayinputstream扩展,并在运行时利用a来增加功能。如果有兴趣使用ByteArrayInputStream?使用Scanner并将ByteArrayInputStream传递

我读书,但我没有听懂。我已经看到但还没有看到使用
ByteArrayInputStream
ByteArrayInputStream
转换为
String
的正确示例

要将
ByteArrayInputStream
的内容检索为
字符串
,建议使用
ByteArrayOutputstream
还是有更可取的方法


我正在考虑通过tearrayinputstream扩展
,并在运行时利用a来增加功能。如果有兴趣使用
ByteArrayInputStream

使用
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);

一个
ByteArrayOutputStream
可以从任何
InputStream
读取,并在最后生成一个
字节[]

但是,使用
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

使用Base64编码

假设您获得了ByteArrayOutputStream:

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

参见

为什么没有人提到
org.apache.commons.io.IOUtils

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

String result = IOUtils.toString(in, StandardCharsets.UTF_8);
只需一行代码。

Java 9+解决方案:

new String(inputStream.readAllBytes(), StandardCharsets.UTF_8);


您可能需要一个
InputStreamReader
,如您提供的第二个链接所述。
ByteArrayInputStream
不会将字节转换为字符。您真的有ByteArrayInputStream(这意味着您有一个字节[])还是只有一个InputStream?@BrettOkken我真的有一个ByteArrayInputStream,其构造函数被传递一个字节数组(大小不同)@DavidWallace在第二个链接中使用InputstreamReader回复了这篇文章:
问题在于它只能读取第一行分隔符。它假定您要查找的字符串不包含任何行分隔符。通常这是正确的,但如果不是,这将不会真正起作用。
为什么我不继续这个例子。但你可以一直从中读取,直到它为空。如果我有
XML
HTML
文档,我能不受限制地读取它吗?是的,没有限制。ByteArrayInputStream如何读取ByteArrayInputStream?我已经扩展了答案。原则上,可以循环读取
输入流
,然后通过tearrayoutputstream写入
。传统上,I/O缓冲区的常规大小为2次方。同意2次方大小;我喜欢并感谢您。从函数的javadoc来看:使用此方法的返回值来分配用于保存此流中所有数据的缓冲区是永远不正确的。@nucatus true,我没有声明
中的
ByteArrayInputStream
。一个五月。很好的解决方案。但是,我需要首先将ByteArrayInputStream连接到ByteArrayOutStream。这是如何实现的?重要的是Base64.Encoder是在Java8中发布的它应该是字符串s=新字符串(Base64.getEncoder().encode(bas.toByteArray());谢谢。正如@SiddharthGharge所说,编码器的创建是错误的。还有一个问题是关于InputStream,而不是OutputStream。我添加了两个必需的
import
语句,以便不是每个人都必须搜索它们。很抱歉它不再只是一行代码;)对不起,我认为这个答案不正确。因为如果您的输入是ByteArrayInputStream,您将得到编译错误。此函数的正确输入是InputStream
import java.nio.charset.StandardCharsets;
import org.apache.commons.io.IOUtils;

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