深入理解java io

理解几个最基础的流
字节流输入:inputStream
字节输出流:outputStream
字符输入流:Reader
字符输出流:Writer

文件对象:File

RandomAccessFile(随机文件操作):一个独立的类,直接继承至Object.它的功能丰富,可以从文件的任意位置进行存取(输入输出)操作。

输入流想要转换为文件,则需要构建一个文件输入流,并且构建一个文件输出流,和一个文件对象;将输入流的数据读到某个字节数组中,然后用文件输出流进行输出..
这样就存在本地文件了,不能直接想着把输入流转换成文件,没有这样的构造器,有的能实现的话也是在本地某个地方用这个输入流在本地写了个临时文件出来.

 InputStream inputStream = image.getBinaryStream();
 FileOutputStream fileOutputStream = new FileOutputStream("33aaa.jpg");
 //inputStream.read(b, off, len),每次尽量从输入流中读取len个字节,但是不够的话就有多少读多少。每次读取自后,指针自动向后移动读取的字节位数。off表示相对当前指针还要往前多少位
        int off = 0;
        int len = 1024;
        byte[] b = new byte[1024];
        while ((len = inputStream.read(b, off, len)) != -1) {
            fileOutputStream.write(b,0,len);
        }
        inputStream.close();
        fileOutputStream.close();

java.io.File类的使用

IO原理及流的分类
输入input:读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中。
输出output:将程序(内存)数据输出到磁盘、光盘等存储设备中
流的分类
按操作数据单位不同分为:字节流(8 bit),字符流(16 bit)
按数据流的流向不同分为:输入流,输出流
按流的角色的不同分为:节点流,处理流

节点流可以从一个特定的数据源读写数据
处理流是“连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能,比如缓冲流。
这里写图片描述

这里写图片描述
文件流
FileInputStream / FileOutputStream / FileReader / FileWriter

缓冲流
BufferedInputStream / BufferedOutputStream /
BufferedReader / BufferedWriter
缓冲流的使用

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

public class BufferIoDemo {

    public static void main(String[] args) {
        try {
            String src = "E:\\节点流和处理流.png";
            String desc = "E:\\节点流和处理流2.png";
            InputStream inputStream = new FileInputStream(new File(src));
            OutputStream outputStream = new FileOutputStream(new File(desc));
            BufferedInputStream bis = new BufferedInputStream(inputStream);
            BufferedOutputStream bos = new BufferedOutputStream(outputStream);
            byte[] b = new byte[1024];
            int off = 0;
            int len = 1024;
            while ((len = bis.read(b, off, len)) != -1) {
                bos.write(b, off, len);
            }
            bos.flush();
            bos.close();
            bis.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}

转换流
InputStreamReader / OutputStreamWriter
标准输入/输出流
打印流(了解)
PrintStream / PrintWriter
数据流(了解)
DataInputStream / DataOutputStream
对象流 —-涉及序列化、反序列化
ObjectInputStream / ObjectOutputStream
随机存取文件流
RandomAccessFile

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值