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

原文地址:https://www.cnblogs.com/tinya/p/8483006.html

时间: 2024-08-29 13:02:15

InputStream转换为String, byte[] data = new byte[1024]详解的相关文章

【DataGuard】部署Data Guard相关参数详解 (转载)

原文地址:[DataGuard]部署Data Guard相关参数详解 作者:secooler 有关物理Data Guard部署参考<[DataGuard]同一台主机实现物理Data Guard配置安装>(http://space.itpub.net/519536/viewspace-578181),本文对部署Data Guard过程中主备库使用到的参数进行比较描述. 1.DB_NAME,数据库名字,需要保持同一个Data Guard 中所有数据库DB_NAME相同primary端和standb

【Stackoverflow好问题】将InputStream转换为String

不重复造轮子.最靠谱的方法,还是用Apache commons IOUtils 这样简单几行代码就搞定了 StringWriter writer = new StringWriter(); IOUtils.copy(inputStream, writer, encoding); String theString = writer.toString(); 或者 String theString = IOUtils.toString(inputStream, encoding) 如果不想引入Apac

ruby入门知识:string的创建及使用方法详解

本文主要讲ruby中的字符串的创建以及使用方法,希望能帮助到正在学习ruby(http://www.maiziedu.com/course/ruby-px/)字符串的朋友. 字符串的创建:字符串也是一种对象,和其他一般的对象一样,能够使用new的方法来创建. eg: str = String.new str << 72 << 101 << 108 << 108 << 111 p str                #=> " H

字符串(String)几个常用方法的详解

String:(字符串) indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置. stringObject.indexOf(searchvalue,fromindex) searchvalue 必需.规定需检索的字符串值. fromindex 可选的整数参数.规定在字符串中开始检索的位置.它的合法取值是 0 到 stringObject.length - 1.如省略该参数,则将从字符串的首字符开始检索. 该方法将从头到尾地检索字符串 stringObject,看它是否含有子串

Spring Data JPA @EnableJpaRepositories配置详解

@EnableJpaRepositories注解用于Srping JPA的代码配置,用于取代xml形式的配置文件,@EnableJpaRepositories支持的配置形式丰富多用,本篇文章详细讲解. 1.简单配置 @EnableJpaRepositories("com.spr.repository") 简单配置支持多个package,格式如下: @EnableJpaRepositories({"com.cshtong.sample.repository", &qu

Action、Category、Data、Extras知识详解

开头 Intent作为联系各Activity之间的纽带,其作用并不仅仅只限于简单的数据传递.通过其自带的属性,其实可以方便的完成很多较为复杂的操作.例如直接调用拨号功能.直接自动调用合适的程序打开不同类型的文件等等. 诸如此类,都可以通过设置Intent属性来完成. Intent主要有以下四个重要属性,它们分别为: Action:Action属性的值为一个字符串,它代表了系统中已经定义了一系列常用的动作.通过setAction()方法或在清单文件AndroidManifest.xml中设置.默认

java.lang.String的trim()方法详解

String.Trim()方法到底为我们做了什么,仅仅是去除字符串两端的空格吗? 一直以为Trim()方法就是把字符串两端的空格字符给删去,其实我错了,而且错的比较离谱. 首先我直接反编译String类,找到Trim()方法: public string Trim() {    return this.TrimHelper(WhitespaceChars, 2); } TrimHelper方法有两个参数,第一个参数名WhitespaceChars,首字母尽然是大写的,肯定有文章,真不出我所料:

C++中 string 中的方法的使用详解(心得)

string 字符串在所有的语言中都非常重要,c++也不例外,接下来我们将介绍string中的常用方法 1. size() 和 length() 函数 : 他们返回字符串的真实长度,且不会因为空格而截断,这两个方法完全等价,使用及输出如下: #include<iostream> #include<string> using namespace std; int main(void) { string s = "dasddasd"; printf("si

[技巧篇]19.InputStream与String,Byte之间互转[转载]

import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; /** * @see InputStream转化为String String 转换为InputStream InputStream 转化为byte数组 byte转化为InputStream byte转化为String * @author