zoukankan      html  css  js  c++  java
  • InputStream转换为String, byte[] data = new byte[1024]详解

    /**
     * This file created at 2018年2月28日.
     *
     * Copyright (c) 2002-2018 Bingosoft, Inc. All rights reserved.
     */
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.UnsupportedEncodingException;
    
    /**
     * <code>{@link ByteTest}</code>
     *
     * TODO : document me
     *
     * @author ke
     */
    public class ByteTest {
        
         public static void main(String[] args) {
             String inputStr = "hello123456";  
             String outputStr = "";  
             try {  
                 InputStream inputStream = new ByteArrayInputStream(inputStr.getBytes("UTF-8")); ///这里需要用try...catch...不然报错  
    //             ByteArrayInputStream:ByteArrayInputStream(byte[] buf)  
    //             创建一个 ByteArrayInputStream,使用 buf 作为其缓冲区数组。  
    //             String:byte[] getBytes(Charset charset)  
    //             使用给定的 charset 将此 String 编码到 byte 序列,并将结果存储到新的 byte 数组。  
                 outputStr = changeInputStream(inputStream, "utf-8");  
                 System.out.println(outputStr);  
             } catch (UnsupportedEncodingException e) {  
                 e.printStackTrace();  
             }  
        }
         
         public static String changeInputStream(InputStream inputStream, String encode) {  
             String res = "";  
             ByteArrayOutputStream outputStream = new ByteArrayOutputStream();  
            // byte[] data = new byte[100];///输出 hello123456  
             byte[] data = new byte[5];///每次读取5个字节
             int len = 0;  
             try {  
                 while ((len = inputStream.read(data)) != -1) { ////inputStream-->data[]  
    //                InputStream: int read(byte[] b)  
    //                 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。  
    //                 返回:  
    //                 读入缓冲区的总字节数;如果因为已经到达流末尾而不再有数据可用,则返回 -1。  
       
                     outputStream.write(data, 0, len);/////outputStream<--data[]  
    //               ByteArrayOutputStream:  void write(byte[] b, int off, int len)  
    //                 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此 byte 数组输出流。  
                 }  
                 res = new String(outputStream.toByteArray(), encode);  
    //           ByteArrayOutputStream:  byte[] toByteArray()  
    //             创建一个新分配的 byte 数组。  
    //           String:  String(byte[] bytes, Charset charset)  
    //             通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String。  
       
                 inputStream.close();  
             } catch (IOException e) {  
                 e.printStackTrace();  
             }  
             return res;  
         }//changeInputStream  
     
    }

    我最想说明的是,虽然data[]的长度比string短,但仍然也会输出string的所有字符,不会只输出data[]的长度的字符串 

    第一次取前5个字符写入outputStream中,往后都是每次写入5个字符到outputStream中,直到写入到字符串末尾 

  • 相关阅读:
    如何基于 String 实现同步锁?
    Web前端开发必不可少的9个开源框架
    Java知识,面试总会问到虚拟机,虚拟机类加载机制你懂吗?
    带你了解Java的序列化与反序列化
    想自己写框架?不了解Java注解机制可不行
    深度解密:Java与线程的关系
    手把手教你分析Mysql死锁问题
    windows server 2012 安装 DockerToolbox
    .NET CORE MVC  返回 JSON 数据
    .net core ajax提交Controller接收不到的问题处理方法
  • 原文地址:https://www.cnblogs.com/tinya/p/8483006.html
Copyright © 2011-2022 走看看