Java面试知识点(四十)I/O 基本概念

1.I/O 框架图

Java面试知识点(四十)I/O 基本概念_第1张图片

2.比特Bit、字节Byte、字符Char

  • Bit 最小的二进制单位 ,是计算机的操作部分 取值 0 或者 1
  • Byte 是计算机操作数据的最小单位由 8 位 bit 组成 取值(-128-127)
  • Char 是用户的可读写的最小单位,在 Java 里面由 16 位 bit 组成 取值(0-65535)

3.java中流的种类

  • 字符流和字节流。

所有的字节流都继承自 inputStream 和 OutputStream,

所有的字符流继承自 Reader 和 Writer。

  • 节点流和处理流

节点流:直接与数据源相连,用于输入或者输出

处理流:在节点流的基础上对之进行加工,进行一些功能的扩展

4.字符流和字节流的区别

  • 要把一片二进制数据数据逐一输出到某个设备中,或者从某个设备中逐一读取一片二进制数据,不管输入输出设备是什么,我们要用统一的方式来完成这些操作,用一种抽象的方式进行描述,这个抽象描述方式起名为 IO 流,对应的抽象类为 OutputStream 和 InputStream ,不同的实现类就代表不同的输入和输出设备,它们都是针对字节进行操作的。

  • 在应用中,经常要完全是字符的一段文本输出去或读进来,用字节流可以吗?
    计算机中的一切最终都是二进制的字节形式存在。对于 “中国” 这些字符,首先要得到其对应的字节,然后将字节写入到输出流。读取时,首先读到的是字节,可是我们要把它显示为字符,我们需要将字节转换成字符。由于这样的需求很广泛,人家专门提供了字符流的包装类。

  • 底层设备永远只接受字节数据,有时候要写字符串到底层设备,需要将字符串转成字节再进行写入。字符流是字节流的包装,字符流则是直接接受字符串,它内部将串转成字节,再写入底层设备,这为我们向 IO 设别写入或读取字符串提供了一点点方便。

5.常用流的应用场景

  • 对字节流进行大量的从硬盘读取
    使用BufferedInputStream
    使用缓冲流能够减少对硬盘的损伤

  • 打印出不同类型的数据到数据源
    Printwriter 可以打印各种数据类型
    也就是常用的System.out.println()

  • 把我们控制台的输出改成输出到一个文件里面
    SetOut(printWriter,printStream)重定向

  • 基本类型数据和字符串按顺序输出和输入
    使用 DataInputStream DataOutputStream

  • 将字节流转换为字符流
    InputStreamReader 类是从字节流到字符流的桥接器:它使用指定的字符集读取字节并将它们解码为字符。 它使用的字符集可以通过名称指定,也可以明确指定,或者可以接受平台的默认字符集。

6.写入文件

public static void write() {

        File file = null;
        FileWriter fw = null;
        BufferedWriter bw = null;
        String content = "温柔的及时雨";

        try {
            // 打开文件
            String path = "C:\\D\\test.txt";
            file = new File(path);
            if (!file.exists()) {
                file.createNewFile();
            }

            // 写入文件
            fw = new FileWriter(file);
            bw = new BufferedWriter(fw);
            bw.write(content);
            bw.flush();

            fw.close();
            bw.close();
        } catch (Exception e) {

        }
    }

这里需要注意的是,在使用缓冲流的时候,需要调用flush方法,把缓冲流中的内容刷新到文件中,如果不使用,就无法正常写入文件

7.递归读取文件夹

public static void read(String path) {
        if (path == null) {
            return;
        }

        File [] files = new File(path).listFiles();

        if (files == null) {
            return;
        }

        for (File file : files) {
            if (file.isFile()) {
                System.out.println("file name: " + file.getName());
            } else if (file.isDirectory()) {
                System.out.println("directory name: " + file.getName());
                read(file.getPath());
            } else {
                System.out.println("error");
            }
        }
    }

你可能感兴趣的:(java,面试,Java面试知识汇总)