Java中InputSteam怎么转String

InputSteam与String相互转化

字符串被广泛应用于 Java 编程中,是程序经常处理的对象。以对象的方式处理字符串,使字符串更加方便灵活。Java 提供了 String 类创建和操作字符串,当我们从文件中读取数据时,常常需要将 InputStream 转换为 String,以便于下一步的处理。

1.使用 InputStreamReader 和 StringBuilder (JDK)

public class InputStream2String {
    public static void main(String[] args) {
        try {
            InputStream inputStream = new FileInputStream("E:/duckAndJava/IO/testFile.txt");    //路径修改为本地文件所在的位置

            char[] buffer = new char[1024];    //根据需要的数组大小进行自定义
            StringBuilder out = new StringBuilder();
            Reader in = new InputStreamReader(inputStream, "UTF-8");
            for (int numRead; (numRead = in.read(buffer, 0, buffer.length)) > 0; ) {
                out.append(buffer, 0, numRead);
            }
            String myString =  out.toString();

            System.out.println("myString = " + myString);

        }catch (IOException e){
            e.printStackTrace();
        }
    }

2.使用 inputStream.read() and StringBuilder

StringBuilder sb = new StringBuilder();
for (int ch; (ch = inputStream.read()) != -1; ) {
    sb.append((char) ch);
}
String myString = sb.toString();

3.使用 ByteArrayOutputStream and inputStream.read

ByteArrayOutputStream result = new ByteArrayOutputStream();
 byte[] buffer = new byte[1024];
 for (int length; (length = inputStream.read(buffer)) != -1; ) {
     result.write(buffer, 0, length);
 }
 String myString = result.toString("UTF-8");

4.使用 BufferedInputStream 和 ByteArrayOutputStream

BufferedInputStream bis = new BufferedInputStream(inputStream);
ByteArrayOutputStream buf = new ByteArrayOutputStream();
for (int result = bis.read(); result != -1; result = bis.read()) {
    buf.write((byte) result);
}
String myString = buf.toString("UTF-8");

5.使用 BufferedReader

String newLine = System.getProperty("line.separator");
 BufferedReader reader = new BufferedReader(
         new InputStreamReader(inputStream));
 StringBuilder result = new StringBuilder();
 for (String line; (line = reader.readLine()) != null; ) {
     if (result.length() > 0) {
         result.append(newLine);
     }
     result.append(line);
 }
 String myString = result.toString();

6.使用 Stream API 或 parallel Stream API

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

String myString = new BufferedReader(new InputStreamReader(inputStream))

    .lines().parallel().collect(Collectors.joining("\n"));

7.使用 StringWriter 和IOUtils.copy (Apache Commons)

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

8.使用CharStreams (Google Guava)

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

分别按照字符串长度来进行测试。

当我们使用的是一个小字符串(length=175),得到的性能测试结果如下:

当我们使用的是一个长字符串(length=50100),得到的性能测试结果如下:

为了更加直观,我按照字符串的长度与相应函数消耗的平均时间,做了如下的表格:

更加直观的表格图,如下:

好了,关于 InputStream 到String 转换的介绍就是这些,方法虽多,但是只要认真看懂了其中一个,再看其他的,就只是调用的类和方法不同罢了,思路都是一样的。

在实际运用中,还需要根据具体的环境,进行编码方式和换行符处理等的调整,选用最适合自己项目工程的处理方式。

到此这篇关于Java中InputSteam怎么转String的文章就介绍到这了,更多相关InputSteam转String内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • JavaScript JSON.stringify()的使用总结

    一.使用方法 1.基本用法 JSON.stringify()可以把一个JavaScript对象序列化为一个JSON字符串. let json1 = { title: "Json.stringify", author: [ "浪里行舟" ], year: 2021 }; let jsonText = JSON.stringify(json1); 默认情况下,JSON.stringify()会输出不包含空格或缩进的JSON字符串,因此jsonText的值是这样的: &q

  • 详解PHP用mb_string处理windows中文字符

    我们都知道windows中(当然是中文版),文件名和文件内容等编码都是gbk,而我们在开发过程中,IDE里的编码则是UTF-8,(这里不讨论为什么等等问题,只考虑怎么把编码转变成一样的)所以导致我写的UTF-8编码的正则模式字符串中的中文在gbk编码的文件中并不能正确匹配. 一开始,我并没有什么办法,试过把PHP脚本文件的编码也改成GBK,也可以用,但是想到这种方法太low了,所以找一找PHP中有没有函数可以满足我的需求. 这时,我想到了以前在处理windows中的文件名时用的函数iconv()

  • 详解如何解决使用JSON.stringify时遇到的循环引用问题

    程序员在日常做TypeScript/JavaScript开发时,经常需要将复杂的JavaScript对象通过JSON.stringify序列化成json字符串,保存到本地以便后续具体分析. 然而如果JavaScript对象本身包含循环引用,则JSON.stringify不能正常工作,错误消息: VM415:1 Uncaught TypeError: Converting circular structure to JSON 解决方案,使用下面这段来自这个网站的代码,定义一个全局cache数组,每

  • golang 的string与[]byte转换方式

    相对于C语言,golang是类型安全的语言.但是安全的代价就是性能的妥协. 下面我们看看Golang不想让我们看到的"秘密"--string的底层数据. 通过reflect包,我们可以知道,在Golang底层,string和slice其实都是struct: type SliceHeader struct { Data uintptr Len int Cap int } type StringHeader struct { Data uintptr Len int } 其中Data是一个

  • Java基础之StringBuffer详解

    一.前言 StringBuffer是可变长的字符串 1.append 追加 2.delete 删除 3.insert 插入 4.reverse 反转 二.用法 String str1 = "let there "; StringBuffer sb = new StringBuffer(str1); //根据str1创建一个StringBuffer对象 sb.append("be light"); //在最后追加 System.out.println(sb); sb.

  • 浅谈Java中String的常用方法

    String中常用的方法,我以代码的形式,来说明这些常用的方法. @Test public void test1(){ //1.返回字符串的长度 String s1 = "helloworld"; System.out.println(s1.length()); //2.返回某索引处的字符 System.out.println(s1.charAt(1)); //3.判断字符串是否是空字符串 System.out.println(s1.isEmpty()); //4.将String中的所

  • golang strings包的Replace的使用说明

    函数声明: func Trim(s string, cutset string) string 官方描述: 返回将 s 前后端所有 cutset 包含的 utf-8 码值都去掉的字符串. 示例代码: package main import ( "fmt" "strings" _ "test/subpac" ) func main(){ fmt.Println("[ !!! Achtung! Achtung! !!! ]:[]:[&quo

  • Java实用工具之StringJoiner详解

    背景 在平时的业务开发中,我们可能会遇到字符串列表根据分隔符进行拼接的需求.比如: 输入: 数组:["a","b","c"]分隔符:"," 输出: "a,b,c" 处理 通常我们可以使用StringBuilder根据下标位置决定是否需要添加分隔符以达到目的,比如: public static void main(String[] args) { StringBuilder sb = new StringBu

  • Java利用StringBuffer替换特殊字符的方法实现

    在本实例中为保证学生输入的 Java 文件名合格,将利用 StringBuffer 类实现对 Java 文件名中的特殊符号进行替换,包括将中文状态下的"."和全角状态下的"."替换为英文状态下的".". 在本例实现过程中主要使用了 StringBuffer 类的字符查找和替换方法,实现代码如下: import java.util.Scanner; public class test2 { public static void main(Strin

  • 详解java中String值为空字符串与null的判断方法

    Java空字符串与null的区别 1.类型 null表示的是一个对象的值,而不是一个字符串.例如声明一个对象的引用,String a=null. ""表示的是一个空字符串,也就是说它的长度为0.例如声明一个字符串String s="". 2.内存分配 String a=null:表示声明一个字符串对象的引用,但指向为null,也就是说还没有指向任何的内存空间. String s="":表示声明一个字符串类型的引用,其值为""空

随机推荐