📜  Java程序将InputStream转换为字符串(1)

📅  最后修改于: 2023-12-03 15:16:37.721000             🧑  作者: Mango

将InputStream转换为字符串的方法

在Java编程中,我们经常需要将InputStream类型的数据转换为字符串来进行处理。这篇文章将介绍几种用Java编写的将InputStream转换为字符串的方法。

方法1:用BufferedReader读取InputStream

这种方法会使用Java中的BufferedReader类和InputStreamReader类,让读取InputStream更方便和高效。

public static String inputStreamToString(InputStream inputStream) throws IOException {
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
    StringBuilder stringBuilder = new StringBuilder();
    String line;
    while ((line = bufferedReader.readLine()) != null) {
        stringBuilder.append(line).append('\n');
    }
    bufferedReader.close();
    return stringBuilder.toString();
}

上述代码段中,我们首先创建一个BufferedReader对象,并使用InputStreamReader来读取输入流。然后我们循环,使用readLine()函数从BufferedReader中读取行,每次读取都会将line添加到stringBuilder对象中,并加入换行符。最后关闭BufferedReader并返回stringBuilder对象的字符串表示形式。

方法2:用ByteArrayOutputStream将InputStream转换为字符串

这种方法会使用Java中的ByteArrayOutputStream类和InputStream类,使用ByteArrayOutputStream将InputStream的内容读取到内存中,再根据特定编码生成字符串。

public static String inputStreamToString(InputStream inputStream, Charset charset) throws IOException {
    ByteArrayOutputStream result = new ByteArrayOutputStream();
    byte[] buffer = new byte[1024];
    int length;
    while ((length = inputStream.read(buffer)) != -1) {
        result.write(buffer, 0, length);
    }
    return result.toString(charset.name());
}

上述代码段中,我们首先创建一个ByteArrayOutputStream对象,并从输入流中读取buffer的字节数,使用ByteArrayOutputStream的write()函数将buffer中的字节写入ByteArrayOutputStream。最后返回ByteArrayOutputStream通过一个特定字符串编码所生成的字符串。

方法3:使用Scanner将InputStream转换为字符串

这种方法会利用Java中的Scanner类从InputStream中逐一读取字符串,并根据特定分隔符将其合并为一个字符串。

public static String inputStreamToString(InputStream inputStream, Charset charset) {
    Scanner s = new Scanner(inputStream, charset.name()).useDelimiter("\\A");
    return s.hasNext() ? s.next() : "";
}

上述代码段中,我们首先创建一个Scanner对象,并使用特定字符串编码和特定分隔符读取输入流。最后逐一处理Scanner中的数据并合并为一个字符串。

总结

这篇文章中我们介绍了三种将InputStream转换为字符串的方法。推荐使用第一种方法,因为它可以更方便和高效的转换InputStream。不过,使用其他两种方法也可以方便地实现该功能。