zoukankan      html  css  js  c++  java
  • Java中InputStream和String之间的转化

      在Java中InputStream和String之间的转化十分普遍,本文主要是总结一下转换的各种方法,包括JDK原生提供的,还有一些外部依赖提供的.

    一、InputStream转String

    1.1、JDK原生提供

    方法一

    byte[] bytes = new byte[0];
    bytes = new byte[inputStream.available()];
    inputStream.read(bytes);
    String str = new String(bytes);
    

    方法二 

    String result = new BufferedReader(new InputStreamReader(inputStream))
            .lines().collect(Collectors.joining(System.lineSeparator()));
    

    方法三

    String result = new BufferedReader(new InputStreamReader(inputStream))
           .lines().parallel().collect(Collectors.joining(System.lineSeparator()));
    

    方法四

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

    方法五

    String resource = new Scanner(inputStream).useDelimiter("\Z").next();
    return resource;
    

    方法六

    StringBuilder sb = new StringBuilder();
    String line;
    BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
    while ((line = br.readLine()) != null) {
        sb.append(line);
    }
    String str = sb.toString();
    return str;
    

    方法七

    ByteArrayOutputStream result = new ByteArrayOutputStream();
    byte[] buffer = new byte[1024];
    int length;
    while ((length = inputStream.read(buffer)) != -1) {
        result.write(buffer, 0, length);
    }
    String str = result.toString(StandardCharsets.UTF_8.name());
    return str;
    

    方法八

    BufferedInputStream bis = new BufferedInputStream(inputStream);
    ByteArrayOutputStream buf = new ByteArrayOutputStream();
    int result = bis.read();
    while(result != -1) {
        buf.write((byte) result);
        result = bis.read();
    }
    String str = buf.toString();
    return str;
    

      

    1.2 Apache Common提供

    方法九

    StringWriter writer = new StringWriter();
    IOUtils.copy(inputStream, writer, StandardCharsets.UTF_8.name());
    String str = writer.toString();

    方法十

    String str = IOUtils.toString(inputStream, "utf-8");
    

     

    1.3 Google Guava提供

    方法十一

    String str = CharStreams.toString(new InputStreamReader(inputStream, StandardCharsets.UTF_8));

    方法十二

    String str = new String(ByteStreams.toByteArray(inputStream));
    

      

    针对一个2MB的文件的输入流,多次执行测试如下(单位是毫秒):

    方法十: 111
    方法十一: 236
    方法十二: 36
    方法一: 36
    方法二: 87
    方法三: 66
    方法四: 101
    方法五: 178
    方法六: 40
    方法七: 21
    方法八: 107
    方法九: 31

    从上述结果来看,方法七和方法九更好一些,而方法五和方法十一会更差一些.

    二、String转化为InputStream

    2.1 JDK原生提供

    InputStream is = new ByteArrayInputStream(str.getBytes());
    

    2.2 Apache Common提供

    InputStream targetStream = IOUtils.toInputStream(str, StandardCharsets.UTF_8.name());
    

    2.3 Google Guava提供

    InputStream targetStream =
            new ReaderInputStream(CharSource.wrap(str).openStream(), StandardCharsets.UTF_8.name());
    

      

    转载:https://blog.csdn.net/lmy86263/article/details/60479350

  • 相关阅读:
    sql总结:
    VS2008生成DLL文件的方法、引用dll文件以及意义
    Mysql日期和时间函数
    删除文件后硬盘可用空间为何不增加?
    C# CheckedListBox控件的用法
    SNMP监控一些常用OID的总结
    解决 MariaDB无密码就可以登录的问题
    Cisco路由器用SSH替代Telnet连接
    思科、华为、H3C常用命令对比大全
    转载:关于思科交换机、路由器如何关闭telnet 开启ssh服务
  • 原文地址:https://www.cnblogs.com/xiaomaomao/p/13855112.html
Copyright © 2011-2022 走看看