A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 荒丶 中级黑马   /  2016-4-11 08:24  /  411 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class Demo02_ByteArrayOutputStream {

        /**
         * ByteArrayOutputStream ByteArrayIntputStream
         * 说白了,他就是个小数组,是一个中转站.所以他接收不了流对象
         * 内存输出流
         * 他在创建对象的时候就会创建一个字节数组缓冲区,当写入数据
         * 首先:ByteArrayOutputStream
         * 有两个构造方法
         *                 A.一个无参的,仅仅只是为了创建一个,byte数组输出流对象,用于存储write写入的结果
         *                 B.一个有个size参数的.可以设置指定的缓冲区大小,以字节为单位
         * 他有一个重要方法
         *                 toByteArray();把内存流对象中所有数据转化为byte数组
         *                 转换后的byte数组可以通过String的构造函数来把数组转化为字符串形式
         *                 通过这个方法吧字符串转化为byte数组后.用标准的输出流.然后输出这个数组就可以了.
         *                 fos.write(arr);为什么这样输出的中文没有乱码?
         *                 因为你把字节从文本读进来.又全部写进去.当然没有问题.
         *                 如果是普通的转换.
         *                 他有一个注意点
         *                 他的数据是写在内存的.虽然属于流.但是不用关闭.如果流是通过硬盘来连接的,那么这个流就需要关闭,比如InputStream
         *                 读取中文的时候出现了乱码
         *                 出现乱码肯定是定义了一个字节数组,然后用syso在循环中输出.
         *                 拷贝文件只要码表相同.用哪个都不会出现乱码
         *                 解决方案
         *                 1.字符流读取
         *                 2.内存流来解决
         *                 3.得到字节数组,通过String构造方法.来解决
         *                 @throws IOException
         */
        public static void main(String[] args) throws IOException {
//                demo1();
//                demo2();
        }

        private static void demo2() throws IOException {
                byte[] arr = {-50,-46,-43,-66,-44,-38,-54,-64,-67,-25,-75,-60,-74,-91,-74,-53,44,-53};
                ByteArrayInputStream bais = new ByteArrayInputStream(arr);
               
                //因为用小数组定义读取.所以出现了乱码
                int len;
                byte[] arr1 = new byte[2];
                while((len = bais.read(arr1)) != -1) {
                        System.out.print(new String(arr1,0,len));
                }
        }

        private static void demo1() throws  IOException {
                FileInputStream fis = new FileInputStream("a.txt");
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
               
                int b;
                byte[] arr = new byte[2];//2.得到中文字节数组
                while((b = fis.read(arr)) != -1 ) {
//                        baos.write(b);//1.普通的写入文件
                        for(int i = 0 ; i < arr.length ; i++) {
                                System.out.print(arr[i] + ",");
                        }
                       
                }
                fis.close();
                System.out.println(baos);
//                baos.close();//这是在内存操作的流.可以不关闭.这个方法没什么意义.只有操作硬盘的才要关闭
        }

}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马