Java IO 流面试题

发布时间:2024年01月05日
1. Java 中有几种类型的流?JDK 为每种类型的流提供了哪些抽象类以供继承?

参考答案

  基础流可以分为:字节流,字符流。字节流继承于 InputStream、OutputStream 抽象类,字符流继承于
Reader 和 Writer 抽象类。在 java.io 包中还有许多其他的流,如对象流,数据流等都是基于这两种基础流扩展实现的。
2. 字节流与字符流的区别?

参考答案

  1、每次读写的字节数不同。字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符、字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组。
  2、字符流是块读写,字节流是字节读写。字符流和字节流,一个属性范围小,一个属性范围大,字符流只能是字符这一种类型,但是字节流中可以是字符,可以是二进制文件,可以是音频,可以是各种各样的类型,只要符合字节形式存储的都可以接字节流,而字符流只能接字符。
  3、字符流带有缓存,字节流没有。
    
3. 什么是 Java 序列化,如何实现 Java 序列化?

参考答案

    序列化就是一种用来处理对象流的机制,将对象的内容进行流化。可以对流化后的对象进行读写操作,可以将流化后的对象传输于网络之间。序列化是为了解决在对象流读写操作时所引发的问题。
  序列化的实现:将需要被序列化的类实现 Serialize 接口,没有需要实现的方法,此接口只是为了标注对象可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个 ObjectOutputStream(对象流) 对象,再使用 ObjectOutputStream 对象的 write(Object obj) 方法就可以将参数 obj 的对象写出。
    
4. 什么是缓冲区?有什么作用?

参考答案

  缓冲区就是一段特殊的内存区域,很多情况下当程序需要频繁地操作一个资源(如文件或数据库)则性能会很低,所以为了提升性能就可以将一部分数据暂时读写到缓存区,以后直接从此区域中读写数据即可,这样就显著提升了性。
  对于 Java 字符流的操作都是在缓冲区操作的,所以如果我们想在字符流操作中主动将缓冲区刷新到文件则可以使用 flush() 方法操作。
    
5. BufferedReader 属于哪种流, 它主要是用来做什么的, 它里面有那些经典的方法?

参考答案

    属于处理流中的缓冲流,可以将读取的内容存在内存里面,有 readLine() 方法用来读取一行字符串。
    
6. 流如何关闭比较好,如果有多个流互相调用传入是怎么关闭的?

参考答案

    流一旦打开就必须关闭,可以使用 close 方法将其关闭。一般关闭流的操作都放入 finally 语句块中以保证该操作一定会执行。若是多个流互相调用,那么只关闭最外层的流即可。
    
7. 为什么需要序列化?

参考答案

    可以从两个方面来解释,一方面是为了方便数据存储,另一方面是为了方便数据的传递。序列化就是将一对象 (标志对象的类型) 及其状态转换为字节码,保存起来(可以保存在数据库,内存,文件等), 然后可以在适当的时候再将其状态恢复 (也就是反序列化)
    
8. 哪些属性不能被序列化?

参考答案

Java 中未直接或间接实现序列化接口的类和属性不能被序列化,被 static,transient 修饰的属性不会被序列化。
    
9. 序列化 ID 作用?

参考答案

    Java 的序列化机制是通过在运行时判断类的 serialVersionUID 来验证版本一致性的。在进行反序列化时,JVM 会把传来的字节流中的 serialVersionUID 与本地实体类中的 serialVersionUID 进行比较,如果相同则认为是一致的,便可以进行反序列化,否则就会报序列化版本不一致的异常。
    
10. transient 关键字作用?

参考答案

transient 关键字阻止该变量被序列化。

文章来源:https://blog.csdn.net/qq_57747969/article/details/135384319
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。