Java IO流-节点流-字节数组流

Java IO流 -> 节点流 -> 字节数组流

1. 字节数组流 ByteArrayInputStream/ByteArrayOutputStream
  • 通过字节的形式操作一块内存区域,虚拟机可以直接访问,因此不需要通知操作系统释放系统资源,虚拟机的垃圾回收机制就可以将资源回收。主动调用close方法也可以,该方法是一个空方法,什么也不做;

  • 主要用来缓存数据,向它的内部缓冲区写入数据,缓冲区自动增长,当写入完成时可以从中提取数据。常用于存储数据以以便一次写入。

1.1 ByteArrayInputStream的基本使用
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
/**
 * 测试字节数组输入流ByteArrayInputStream
 */
public class TestByteArrayInputStream {
    public static void main(String[] args) {
        try{
            //1.指定数据源
            byte[] data = "public class TestByteArrayInputStream {\n\tpublic static void main(String[] args){".getBytes();
            //2.创建流
            InputStream in = new ByteArrayInputStream(data);
            //3.操作数据
            byte[] buffer = new byte[10];
            for(int len = 0; (len = in.read(buffer)) != -1;){
                System.out.print(new String(buffer,0,len));
            }
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}
1.2 ByteArrayOutputStream的基本使用
import java.io.*;
import java.util.Arrays;
/**
 * 测试字节数组输出流ByteArrayOutputStream
 */
public class TestByteArrayOutputStream {
    public static void main(String[] args) {
        try{
            //不用指定数据源
            //1.创建流
            OutputStream out = new ByteArrayOutputStream();
            //2.操作数据
            byte[] data = "public class TestByteArrayOutputStream {\n\tpublic static void main(String[] args) {".getBytes();
            out.write(data,0,data.length);
            out.flush();

            byte[] buf = ((ByteArrayOutputStream) out).toByteArray();
            System.out.println(new String(buf,0,buf.length));
            
            }catch (IOException e){
            e.printStackTrace();
        }
    }
}
2. 文件到字节数组的拷贝 / 字节数组到文件的拷贝
import java.io.*;
public class TestFileUtil {
    public static void main(String[] args) {               
        try{
            /**
             * 1.从一个文件读取数据到字节数组中
             */
            InputStream in = new FileInputStream("D:\\pictures\\babe.jpg"); //该图片的大小为352851
            OutputStream out = new ByteArrayOutputStream();
            FileUtil f = new FileUtil(in,out);
            f.copy();
            byte[] buffer = ((ByteArrayOutputStream) out).toByteArray();
            System.out.println(buffer.length);  //352851
            
            /**
             * 2.将字节数组写出到文件
             */
            in = new ByteArrayInputStream(buffer);
            out = new FileOutputStream("byteArray.jpg");
            f = new FileUtil(in, out);
            f.copy();
        }catch (FileNotFoundException e){
            e.printStackTrace();
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值