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中,直到写入到字符串末尾 

posted @ 2018-02-28 12:49  天涯过者  阅读(548)  评论(0编辑  收藏  举报