当前位置: 首页 > 面试题库 >

在java中如何将一个输入了 InputStream转为一个字符串String?

王兴庆
2023-03-14
问题内容

在java中如何将一个输入了 InputStream转为一个字符串String?


问题答案:

将InputStream转换为字符串的方法:

使用IOUtils.toString(Apache Utils)

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

使用CharStreams(Guava)

String result = CharStreams.toString(new InputStreamReader(
      inputStream, Charsets.UTF_8));

使用Scanner(JDK)

Scanner s = new Scanner(inputStream).useDelimiter("\\A");
String result = s.hasNext() ? s.next() : "";

使用Stream API(Java 8)。警告:此解决方案会将不同的换行符(如\r\n)转换为\n。

String result = new BufferedReader(new InputStreamReader(inputStream))
  .lines().collect(Collectors.joining("\n"));

使用并行流API(Java 8)。警告:此解决方案会将不同的换行符(如\r\n)转换为\n。

String result = new BufferedReader(new InputStreamReader(inputStream)).lines()
   .parallel().collect(Collectors.joining("\n"));

使用InputStreamReader和StringBuilder(JDK)

final int bufferSize = 1024;
final char[] buffer = new char[bufferSize];
final StringBuilder out = new StringBuilder();
Reader in = new InputStreamReader(stream, StandardCharsets.UTF_8);
int charsRead;
while((charsRead = in.read(buffer, 0, buffer.length)) > 0) {
    out.append(buffer, 0, charsRead);
}
return out.toString();

使用StringWriter和IOUtils.copy(Apache Commons)

StringWriter writer = new StringWriter();
IOUtils.copy(inputStream, writer, "UTF-8");
return writer.toString();

使用ByteArrayOutputStream和inputStream.read(JDK)

ByteArrayOutputStream result = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) != -1) {
    result.write(buffer, 0, length);
}
// StandardCharsets.UTF_8.name() > JDK 7
return result.toString("UTF-8");

使用BufferedReader(JDK)。警告:此解决方案将不同的换行符(如\n\r)转换为line.separator系统属性(例如,在Windows中转换为“ \ r \ n”)。

String newLine = System.getProperty("line.separator");
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder result = new StringBuilder();
boolean flag = false;
for (String line; (line = reader.readLine()) != null; ) {
    result.append(flag? newLine: "").append(line);
    flag = true;
}
return result.toString();

使用BufferedInputStream和ByteArrayOutputStream(JDK)

BufferedInputStream bis = new BufferedInputStream(inputStream);
ByteArrayOutputStream buf = new ByteArrayOutputStream();
int result = bis.read();
while(result != -1) {
    buf.write((byte) result);
    result = bis.read();
}
// StandardCharsets.UTF_8.name() > JDK 7
return buf.toString("UTF-8");

使用inputStream.read()和StringBuilder(JDK)。警告:此解决方案存在Unicode问题,例如俄语文本(仅适用于非Unicode文本)

int ch;
StringBuilder sb = new StringBuilder();
while((ch = inputStream.read()) != -1)
    sb.append((char)ch);
reset();
return sb.toString();


 类似资料:
  • 问题内容: 在java中如何将一个字符串转换为一个整型? string to int? 问题答案: 如果你查看Java文档,你会发现“捕获”是此函数可以抛出,当然你必须处理: (此处理方式默认将格式错误的数字设置为0,但你可以根据需要执行其他操作。) 另外,你可以使用库中的方法,该方法与 8结合使用,为将字符串转换为int提供了一种强大而简洁的方法:

  • 问题内容: 假设我有一个包含文本数据的文件,并且想将其转换为(例如,这样我就可以将流的内容写入日志文件)。 将并将其转换为的最简单方法是什么? 问题答案: 这是我的版本

  • 问题内容: 给定一个字符串: 如何将其转换为? 问题答案: 像这样: 请注意,这假设你需要一个,它是一个字节流,它表示编码为UTF-8的原始字符串。 对于小于7的Java版本,请替换为。

  • 问题内容: 在java中如何将一个字符串转换为日期?如何进行日期格式化? 问题答案: 在特定情况下,“ 2010年1月2日”作为输入字符串: “一月”是全文月份,因此请使用模式 “ 2”是较短的月份,因此请使用模式。 “ 2010”是4位数字的年份,因此请使用模式。 注意显式Locale参数的重要性。如果您省略它,那么它将使用默认语言环境,该语言环境不一定是输入字符串的月份名称中使用的英语。如果语

  • 我希望将转换为给定,其方式是由的行组成。此外,一行不应立即读取,而仅在需要时才读取。

  • 问题内容: 除了以下内容外,我想要一种有效的方法来在Python中将一个字符串附加到另一个字符串。 有什么好的内置方法可以使用吗? 问题答案: 如果你仅对一个字符串有一个引用,并且将另一个字符串连接到末尾,则CPython现在会对此进行特殊处理,并尝试在适当位置扩展该字符串。 最终结果是将操作摊销O(n)。 例如 过去是O(n ^ 2),但现在是O(n)。 从源(bytesobject.c): 凭