IO基础知识和操作流程

IO

io代表input(输入)和output(输出)

计算机中,从硬盘,光盘等外部储存设备向内存读入数据叫做输入,反之叫做输出
理解:以内存为中心,把内存当作大脑,
把书上面的知识读到大脑中来,叫做读的操作,也就是输入
把大脑里的知识写在纸上,这叫做写的操作,也就是输出
从别人的大脑获取来的知识也叫做输入,也就是从另外一片内存中获取数据也叫做读

io流的分类

按流的方向分为:输入流(input)和输出流(output)

按照读取数据的方法分可以分为字节流和字符流
字节流即一次只读取一个字节,但是无论什么数据格式例如图片、音频、视频都可以读取,因为它一次只能读取一个字节,所以经常需要开一个byte数组充当它的缓冲区

字符流一次读取一个字符,无论是英文字符还是中文字符都可以一次读取,不过它只能读取.text格式的文件

操作流程

1.确定源,先找到需要进行输入输出的目标文件
2.打开流,打开需要的输入输出流
3.操作,对目标文件进行输入输出操作
4.关闭流,关闭输入输出流,有异常需要捕获,先打开的流后关闭,后打开的流先关闭

关于异常的补充:有时在写比较长的代码时,某个地方需要return但是又不希望后面的
代码无法执行,这时可以抛出一个运行时异常取代return。在方法体中throw的运行时异常
在方法头中无需throws

实例

(FileInputStream和FileOutputStream)

package com.mytest.IO;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class PictureCopy {
    public static void main(String[] args) {
        FileInputStream fis = null;
        FileOutputStream fos =null;   //提升作用域,让fis和fos在try之外也可以用
        try {
            try {
                fis = new FileInputStream("picture.jpg");
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            try {
                fos = new FileOutputStream("picture-secret.jpg");
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            byte[] buffer = new byte[20];    //创造缓冲区,把内存中的内容先读到缓冲区,再把缓冲区的内容写到硬盘中
            int len = 0;
            while (true) {
                try {
                    if (!((len = fis.read(buffer)) != -1)) break;   //这里read()方法读到文件尾返回“-1”
                } catch (IOException e) {
                    e.printStackTrace();
                }
                for (int i = 0; i < len; i++) {
                    buffer[i] = (byte) (buffer[i] * 5);
                }
                try {
                    fos.write(buffer, 0, len);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        } finally {
            if (fos!=null) {
                try {
                    fos.close();       //关闭流,每个打开的流都必须关闭
                }catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

补充:

ObjectOutStream在打开流的时候会把目标文件清空,以便于往文件里写入其他对象。
所以当ObjectInputStream和ObjectOutStream操作同一文件时,先开ObjectInputStream完成操作,
再开ObjectOutStream,防止空文件异常和空指针异常。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值