• 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

     
     
     
  • 相关阅读:
    在django中用MySQL为数据库 新建一个项目的流程
    django ORM中的RelatedManager(关联管理器)
    URL的命名和反向解析
    自定义分页的插件
    从数据库读出数据分页显示
    往数据库批量插入试验数据
    JDK9对集合添加的优化
    全栈工程师
    List的三个子类的特点
    List集合
  • 原文地址:https://www.cnblogs.com/kelelipeng/p/15711830.html
Copyright © 2020-2023  润新知