Java IO流

一、io流原理

1.io流技术是java中进行数据传输的的技术,如:文件读写、网络通讯等。

2.为了保证操作系统的运行安全,将内存分为内核空间和用户空间,用户进程想要操作数据,必须从系统向内核空间发送指令,将数据从内核空间复制到用户空间,然后用户可以调用,从而避免对磁盘造成损伤。

3.流是一个抽象的概念,是指一连串的数据(字符或字节)。程序在读取数据时,需要开启一个通向数据源(内存、文件、网络等)的流,同样,当程序写入数据时,需要开启一个通向目的地的流。

4.流要么是输入流,要么是输出流,从数据源到程序的流是输入流,从程序到数据源的流是输出流。可以一个字节一个字节地往流中写入字节,读出时可以按写入顺序读出一串字符,不能任意访问流中的字节。

二、io流分类

1.按流的数据对象分为:字节流(8bit)、字符流。

2.按流的流向分为:输入流、输出流。

3.按流的功能分为:节点流、处理流/包装流.

流的分类
(抽象基类)字节流字符流
输入流InputstreamReader
输出流OutputstreamWriter

三、实例

1.读取文件内容:

public class FileOperation {
    public static void main(String[] args) {
    }
    @Test
    public void readFile(){
        String filePath="e:\\a.txt";
        int readData=0;
        FileInputStream fileInputStream=null;
        try {
            fileInputStream=new FileInputStream(filePath);
            while ((readData=fileInputStream.read())!=-1){
                System.out.println((char)readData);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                fileInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

2.文件写入内容

public class FileOperation {
    public static void main(String[] args) {
    }
    @Test
    public void writeFile(){
        String filePath="e:\\a.txt";
        FileOutputStream fileOutputStream = null;
        String str="hello java";
        try {
            fileOutputStream= new FileOutputStream(filePath);
            fileOutputStream.write('q');
            fileOutputStream.write(str.getBytes());
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        finally {
            try {
                fileOutputStream.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }
}

3.节点流和处理流的区别和联系

1)节点流是底层流/低级流,直接与数据源相接。

2)处理流包装节点流,不仅可以消除不同节点流的实现差异,还可以提供更方便的方法来完成输入输出。

3)处理流对节点进行包装,使用了修饰器设计模式,不会直接与数据源连接。

处理流的功能主要体现在以下两方面:

·通过增加缓冲的方式来提高输入输出效率。

·处理流可能提供了以一系列便捷的方法来一次输入输出大量数据,使用更加灵活。

·处理流-BufferedReader和BufferedWriter是字符流,是按照字符来读取文件的是,关闭处理流时,只需关闭外层流即可。

示例如下:用处理流读取文件的内容并显示在控制台。


public class BufferedReader_ {
    public static void main(String[] args) throws IOException {
        String filePath="e:\\a.txt";
        BufferedReader bufferedReader = new BufferedReader(new FileReader(filePath));
        String data;
        while ((data=bufferedReader.readLine())!=null){
            System.out.println(data);
        }
        bufferedReader.close();
    }
}

4.ObjectInputStream和ObjectOutputStream可以·对序列化的对象进行操作:

序列化和反序列化:

如果要将int a=1;整个(包括数据类型和变量)都保存到文件,或者要将一个对象保存到文件,则需要将被保存的基本数据类型或对象序列化。

序列化就是在保存数据时,保存数据的值和数据类型。

反序列化就是在恢复数据时,恢复数据的值和数据类型。

为了让某个对象是可序列化的,则必须让它的类是可序列化的,让类可序列化,则必须让它实现以下两个接口之一:

        Serializable

        Externalizable

序列化对象时,默认将里面所有属性序列化,但除了static或transient修饰的成员。

序列化对象时,要求里面属性的类也实现序列化。

序列化是可继承的,当某类已实现序列化,则它的子类也默认实现序列化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值