zoukankan      html  css  js  c++  java
  • java常用string inputStream转换

     

    1、String –> InputStream

    InputStrem is = new ByteArrayInputStream(str.getBytes());
    或者
    ByteArrayInputStream stream= new ByteArrayInputStream(str.getBytes());

     2、InputStream–>String

    复制代码
    inputStream input;
    
    StringBuffer out = new StringBuffer();
         byte[] b = new byte[4096];
         for (int n; (n = input.read(b)) != -1;) {
              out.append(new String(b, 0, n));
         }
    out.toString();
    复制代码

    3、Reader –>String

    复制代码
    BufferedReader in = new BufferedReader(new InputStreamReader(is));
    StringBuffer buffer = new StringBuffer();
    String line = " ";
    while ((line = in.readLine()) != null){
         buffer.append(line);
    }
    return buffer.toString();
    复制代码

    4、String–>Reader

    复制代码
    Reader reader = null;
    BufferedReader r = new BufferedReader(reader);
    StringBuilder b = new StringBuilder();
    String line;
    while((line=r.readLine())!=null) {
         b.append(line);
         b.append(“\r\n”);
    }
    b.toString();
    复制代码
     
    分类: Java SE
     
    _____________________________________________________________________________________________________________________________________________
     

    Java中InputStream和String之间的转换方法

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

    1、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

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

    2、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

     
     
     
  • 相关阅读:
    winform+c#之窗体之间的传值 Virus
    ASP.NET 2.0 利用 checkbox获得选中行的行号, 在footer中显示 Virus
    .NET中的winform的listview控件 Virus
    我的书橱
    Expert .NET 2.0 IL Assembler·译者序一 写在一稿完成之即
    Verbal Description of Custom Attribute Value
    AddressOfCallBacks in TLS
    下一阶段Schedule
    2008 Oct MVP OpenDay 第二天 博客园聚会
    2008 Oct MVP OpenDay 第二天 颁奖·讲座·晚会
  • 原文地址:https://www.cnblogs.com/kelelipeng/p/15711830.html
Copyright © 2011-2022 走看看