java IO流

目录

字节流

字符流​

字节流和字符流的区别

常用的处理流

序列化

File


字节流

 字符流  

字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。

字节流和字符流的区别

①读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。

②处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。

③字节流:一次读入或读出是8位二进制。

   字符流:一次读入或读出是16位二进制。

设备上的数据无论是图片或者视频,文字,它们都以二进制存储的。二进制的最终都是以一个8位为数据单元进行体现,所以计算机中的最小数据单元就是字节。意味着,字节流可以处理设备上的所有数据,所以字节流一样可以处理字符数据。

结论:只要是处理纯文本数据,就优先考虑使用字符流。 除此之外都使用字节流。

常用的处理流

①缓冲流:BufferedInputStrean 、BufferedOutputStream、 BufferedReader、 BufferedWriter 增加缓冲功能,避免频繁读写硬盘。
②转换流:InputStreamReader 、OutputStreamReader实现字节流和字符流之间的转换。
③数据流: DataInputStream 、DataOutputStream 等-提供将基础数据类型写入到文件中,或者读取出来。

序列化

如果想要实现序列化,就要在类上实现一个Serializable接口,这是一个序列化标识。

类发生序列化之后,为了防止类发生改变不能反序列化,在类上生成一个

static final long serialVersionUID。如果不想让类的某个字段序列化。可以加上transient关键字或者在框架中使用@Transient注解。

File

File类是用来操作文件的类,但它不能操作文件中的数据。

File类的常用方法

方法  说明
createNewFile() 当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。
delete()  删除此抽象路径名表示的文件或目录。
exists()   测试此抽象路径名表示的文件或目录是否存在。
getAbsoluteFile() 返回此抽象路径名的绝对路径名形式。
getAbsolutePath() 返回此抽象路径名的绝对路径名字符串。
length()  返回由此抽象路径名表示的文件的长度。
mkdir()创建此抽象路径名指定的目录。

代码

// 字符流复制文件 
public static void main(String[] args) throws IOException {
        FileReader fileReader = null;
        FileWriter fileWriter = null;
        try {
            fileReader = new FileReader("head.text");
            fileWriter = new FileWriter("fos.text");

            int len;
            char[] bytes = new char[1024];
            while ((len = fileReader.read(bytes)) != -1) {
                fileWriter.write(bytes, 0, len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fileReader != null) {
                fileReader.close();
            }
            if (fileWriter != null) {
                fileWriter.close();
            }
        }
    }
 // 字节缓冲流复制文件 head.text -> fos.text   
 public static void main(String[] args) throws IOException {
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try {
            bis = new BufferedInputStream(new FileInputStream("head.text"));
            bos = new BufferedOutputStream(new FileOutputStream("fos.text"));

            int len;
            byte[] bytes = new byte[1024];
            while ((len = bis.read(bytes)) != -1) {
                bos.write(bytes, 0, len);
                bos.flush();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (bos != null) {
                bos.close();
            }
            if (bis != null) {
                bis.close();
            }
        }
    }

参考链接(本文仅限个人学习交流,支持原创,侵权必删)

https://blog.csdn.net/mu_wind/article/details/108674284

https://blog.csdn.net/zhaoyanjun6/article/details/54292148

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值