JAVA中IO面试题

1.什么是IO

I:Input
O:Output
通过IO可以完成硬盘文件的读和写。
IO流又叫输入输出流 ,输入和输出均是以内存作为参照物。
在这里插入图片描述

2. I/O流的分类?

2.1 输入流,输出流

以内存作为参照物,
往内存中去,叫做输入,或者叫做读。
从内存中出来,叫做输出,或者叫做写。

2.2 字节流,字符流

字节流
按照字节的方式读取数据,一次读取1个字节byte,等同于一次读取8个二进制位。这种流是万能的,什么类型的文件都可以读取。包括:文本文件,图片,声音文件,视频文件。
example:
假设文件file1.txt,采用字节流的话是这样读的:
a中国bo张三fe:
第一次读: 一个字节,正好读"a"。
第二次读:一个字节,正好读到"中"字符的一半。
第三次读: 一个字节,正好读到"中字符的另外一半。

字符流
按照字符的方式读取数据, 一次读取一个字符,这种流是为了方便读取普通文本文件而存在的,这种流不能读取:图片、声音、视频等文件。只能读取纯文本文件,连word文件都无法读取。
example:
假设文件file1.txt,采用字符流的话是这样读的:
a中国bo张三fe:
第一次读:'a’字符('a’字符在windows系统中占用1个字节)
第二次读:'中’字符('中’字符在windows系统中占用2个字节)

3. I/O流所使用的具体抽象类

java.io.InputStream 字节输入流
java.io.OutputStream 字节输出流
java.io.Reader 字符输入流
java.io.Writer 字符输出流
所有的流都实现了:java.io.Colseable接口,都是可关闭的,都有close()方法. 流毕竟是一个管道,这个是内存和硬盘之间的通道,养成一个好习惯,用完流将其关闭。
所有的输出流都实现了:java.io.Flushable接口,都是可刷新的,都有flush()方法。养成一个好习惯,输出流在最终输出之后,一定要记得flush()刷新一下。这个刷新表示将通道/管道当中剩余未输出的数据强行输出完(清空管道!)刷新的作用就是清空管道。如果没有flush()可能会导致数据丢失.
注意:在java中只要"类名"以Stream结尾的都是字节流。以"Reader/Writer"结尾的都是字符流 。

4.Java.io 包下常用的流(16个)

文件专属
java.io.FileinputStream   (用得最多)
java.io.FileOutputStream  (用得最多)
java.io.FileReader
java.io.FileWriter

转换流:(将字节流转换成字符流)
java.io.InputStreamReader
java.io.outputStreamWriter

缓冲流专属:
java.io.BufferedReader
java.io.BufferedWriter
java.io.BufferedInputStream
java.io.BufferedOutputStream

数据流专属:
java.io.DataInpoutStream
java.io.DataOutputStream

标准输出流:
java.io.PrintWriter
java.io.PrintStream
    
对象专属流:(掌握)
java.io.ObjectInputStream
java.io.ObjectOutputStream

5.FileInputStream详解

文件字节输入流,万能的,任何类型的文件都可以采用这个流来读
以字节的方式,完成输入的操作,完成读的操作(硬盘 —> 内存)
样例1:读取操作
比如我现在要读取这样内容的一个文本文件
在这里插入图片描述
可以采用InputStream中的read()方法,它每次会读取一个字节。
英文会读取一个字母,汉字读取半个字符或三分之一个字符。
(因为GBK的一个汉字占两个字节,UTF-8的汉字占3个)
读到文件末尾时read()方法会返回-1

    FileInputStream fis = new FileInputStream("C:\\Users\\86185\\Desktop\\temp.txt");
        // 开始读
        int a = fis.read(); // a对应的10进制数值
        int b = fis.read(); // b对应的10进制数值
        int c = fis.read(); // c对应的10进制数值
        int d = fis.read(); // d对应的10进制数值
        int e = fis.read(); // e对应的10进制数值
        int none = fis.read(); // 读到末尾没有值了
        // 如果读不到数据  则返回负一
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        System.out.println(d);
        System.out.println
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值