六、字节数组流ByteArrayInputStream&ByteArrayOutputStream

一、前提

经常而言我们都是针对文件的操作,然后带上缓冲的节点流进行处理,但有时候为了提升效率,我们发现频繁的读写文件并不是太好,那么于是出现了字节数组流,即存放在内存中,因此有称之为内存流;

1.ByteArrayInputStream类

  • ByteArrayInputStream包含一个内部缓冲区,其中包含可以从流中读取的字节。 内部计数器跟踪由read方法提供的下一个字节。

    关闭一个ByteArrayInputStream没有任何效果。 该流中的方法可以在流关闭后调用,而不生成IOException

 1 import java.io.ByteArrayInputStream;
 2 import java.io.FileNotFoundException;
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5
 6 /**
 7  * 四个步骤:字节数组输入流
 8  * 1、创建源  : 字节数组 不要太大
 9  * 2、选择流
10  * 3、操作
11  * 4、释放资源: 可以不用处理
12  *
13  * 14  *
15  */
16 public class IOTest07 {
17
18     public static void main(String[] args) {
19         //1、创建源
20         byte[] src = "talk is cheap show me the code".getBytes();   //直接编码
21         //2、选择流
22         InputStream  is =null;
23         try {
24             is =new ByteArrayInputStream(src);
25             //3、操作 (分段读取)
26             byte[] flush = new byte[5]; //缓冲容器
27             int len = -1; //接收长度
28             while((len=is.read(flush))!=-1) {
29                 //字节数组-->字符串 (解码)
30                 String str = new String(flush,0,len);
31                 System.out.println(str);
32             }
33
34         } catch (IOException e) {
35             e.printStackTrace();
36         }finally {
37             //4、释放资源,可以不用写
38             try {
39                 if(null!=is) {
40                     is.close();
41                 }
42             } catch (IOException e) {
43                 e.printStackTrace();
44             }
45         }
46     }
47
48 }

1.ByteArrayOutputStream类

  • 该类实现了将数据写入字节数组的输出流。 当数据写入缓冲区时,缓冲区会自动增长。 可以使用toByteArray()toString()检索数据。

    关闭ByteArrayOutputStream没有任何效果。 在关闭流之后,可以调用此类中的方法,而不生成IOException

     1 import java.io.ByteArrayOutputStream;
     2 import java.io.FileNotFoundException;
     3 import java.io.IOException;
     4
     5 /**
     6  * 字节数组输出流 ByteArrayOutputStream
     7  *1、创建源  : 内部维护
     8  *2、选择流  : 不关联源
     9  *3、操作(写出内容)
    10  *4、释放资源 :可以不用
    11  *
    12  * 获取数据:  toByteArray()
    13  *  14  *
    15  */
    16 public class IOTest08 {
    17
    18     public static void main(String[] args) {
    19         //1、创建源,可以不用创建,
    20         byte[] dest =null;
    21         //2、选择流 (新增方法)
    22         ByteArrayOutputStream baos =null;
    23         try {
    24             baos = new ByteArrayOutputStream();  //不需要指定路径
    25             //3、操作(写出)
    26             String msg ="show me the code";
    27             byte[] datas =msg.getBytes(); // 字符串-->字节数组(编码)
    28             baos.write(datas,0,datas.length);
    29             baos.flush();
    30             //获取数据
    31             dest = baos.toByteArray();
    32             System.out.println(dest.length +"-->"+new String(dest,0,baos.size()));
    33         }catch(FileNotFoundException e) {
    34             e.printStackTrace();
    35         }catch (IOException e) {
    36             e.printStackTrace();
    37         }finally{
    38             //4、释放资源
    39             try {
    40                 if (null != baos) {
    41                     baos.close();
    42                 }
    43             } catch (Exception e) {
    44             }
    45         }
    46     }
    47
    48 }

原文地址:https://www.cnblogs.com/qiaoxin11/p/12588876.html

时间: 2024-11-09 05:20:25

六、字节数组流ByteArrayInputStream&ByteArrayOutputStream的相关文章

Java文件与io——字节数组流数据流字符串流

字节数组流 ByteArrayInputStream:包含一个内部缓冲区,该缓冲区包含从流中读取的字节.内部计数器跟踪read方法要提供的下一个字节.关闭ByteArrayInputStream无效.此类中的方法在关闭此流后仍可被调用,而不会产生任何IOException. ByteArrayOutputStream:此类中实现了一个输出流.其中的数据被写入一个byte数组.缓冲区会随着数据的不断写入而自动增长.可使用toByteArray()和toString()获取数据.关闭ByteArra

利用字节流和字节数组流是实现文件的复制

package ioxuexi; import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;i

Java IO学习笔记(三)转换流、数据流、字节数组流

转换流 1.转换流:将字节流转换成字符流,转换之后就可以一个字符一个字符的往程序写内容了,并且可以调用字符节点流的write(String s)方法,还可以在外面套用BufferedReader()和BufferedWriter,并使用它们的readLine 和 newLine方法. 2.有两种转换流:InputStreamReader.OutputStreamWriter 练习小程序1: package test.io.transfer; import java.io.FileOutputSt

java基础(IO流---字节流、字符流、字节数组流)

字节流: FileInputStream:通过字节的方式读取文件,适合读取所有类型的文件(图像.视频等),全字符请考虑FileReader FileOutputStream:通过字节的方式写出或追加数据到文件,适合所有类型的文件(图像.视频等),全字符请考虑FileWriter 字符流: FileReader :通过字符的方式读取文件,仅适合字符文件 FileWriter :通过字节的方式写出或追加数据到文件中,仅适合字符文件 字节数组流: ByteArrayInputStream:字节数组输入

内存流(字节数组流)ByteArrayInputStream

package org.example.io; import java.io.ByteArrayInputStream;import java.io.IOException; /** * ByteArrayInputStream:在创建对象时传入数组即可,不需要传文件,也没有新增的方法,close()关闭无效 * 流本身就是内存中的资源,流中的内容也是内存中的资源,所以不用手动关闭,内存会给他释放,所以不用关闭流 * 流的内容是内存中的资源,不访问磁盘 */ public class TestB

java _io_图片到内存(字节数组),字节数组到文件,练习文件流和字节数组流

//图片读取到字节数组中,字节数组写出到文件 public class test{ public static void main(String[]args) { String path="C:/Users/10853/eclipse-workspace/hell/linux学习路线.png"; byte[] data=toByteArray(path); //图片不能直接到字节数组中,is.read()返回的是int类型的大小,new String是解码 //需要写入字节数组(内存)

JavaSE 高级 第09节 字节数组输入流ByteArrayInputStream

2016-07-24 1,ByteArrayInputStream FileInputStream的输入源是文件. ByteArrayInputStream的输入源是字节数组. reset() 重置到mark标记的位置,如果没有调用过mark方法, 则重置到缓冲区(ByteArray)的起始位置 mark(int) package com.java1995; import java.io.ByteArrayInputStream; public class TestByteArrayInputS

测试数据流和字节数组流的demo

import java.io.*; import java.util.*; public class TestDataOutputStream{ public static void main(String[] args){ try{ ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(baos); dos.writeDouble(Math.ra

黑马程序猿——26,基本数据操作流,字节数组操作流,转换流,编码表

-----------android培训.java培训.java学习型技术博客.期待与您交流! ------------ 黑马程序猿--26, DataInputStream,DataOutputStream, ByteArrayInputStream,ByteArrayOutputStream, InputStreamReader,OutputStreamWriter,编码表 /* DataInputStream和DataOutputStream 能够更加操作基本数据类型的流 注意这里是Dat