014期JavaSE面试题十四基本IO流

28次阅读

共计 2020 个字符,预计需要花费 6 分钟才能阅读完成。

开篇介绍

大家好,我是 Java 面试题库的提裤姐,明天这篇是 JavaSE 系列的第十四篇,次要总结了 Java 中的 IO 流的问题,IO 流分为两篇来讲,这篇是第一篇,次要是根本 IO 流,第二篇次要为网络 IO 流,在后续,会沿着第一篇开篇的常识线路始终总结上来,做到日更!如果我能做到百日百更,心愿你也能够跟着百日百刷,一百天养成一个好习惯。

什么是 io 流

它是一种数据的流从源头流到目的地。比方文件拷贝,输出流和输入流都包含了。输出流从文件中读取数据存储到过程 (process) 中,输入流从过程中读取数据而后写入到指标文件。

Java 中有几种类型的流?

依照流的方向

  • 输出流(inputStream
  • 输入流(outputStream)。

依照实现性能分

  • 节点流(能够从或向一个特定的中央(节点)读写数据。如 FileReader)
  • 解决流(是对一个已存在的流的连贯和封装,通过所封装的流的性能调用实现数据读写。如 BufferedReader。解决流的构造方法总是要带一个其余的流对象做参数。一个流对象通过其余流的屡次包装,称为流的链接。)

依照解决数据的单位:字节流和字符流。字节流继承于 InputStream 和 OutputStream,字符流继承于
InputStreamReader 和 OutputStreamWriter。

字节流如何转换为字符流

字节输出流转字符输出流通过 InputStreamReader 实现,该类的构造函数能够传入 InputStream 对象。
字节输入流转字符输入流通过 OutputStreamWriter 实现,该类的构造函数能够传入 OutputStream 对象。

如何将一个 java 对象序列化到文件里?

在 java 中可能被序列化的类必须先实现 Serializable 接口,该接口没有任何形象办法只是起到一个标记作用。

什么是 java 序列化,如何实现 java 序列化?

序列化
是一种用来解决对象流的机制,所谓对象流也就是将对象的内容进行流化。能够对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。

序列化的实现:将须要被序列化的类实现 Serializable 接口,该接口没有须要 实现的办法,implements Serializable 只是为了标注该对象是可被序列化的,而后应用一个输入流 (如:FileOutputStream) 来结构
一个 ObjectOutputStream(对象流)对象,接着,应用 ObjectOutputStream 对象的 writeObject(Object obj)办法就能够将参数为 obj 的对象写出(即保留其状态),要复原的话则用输出流。

如何实现对象克隆?

两种形式:

  • 实现 Cloneable 接口并重写 Object 类中的 clone()办法;
  • 实现 Serializable 接口,通过对象的序列化和反序列化实现克隆,能够实现真正的深度克隆。

留神:基于序列化和反序列化实现的克隆不仅仅是深度克隆,更重要的是通过泛型限定,能够查看出要克隆的对象是否反对序列化,这项查看是编译器实现的,不是在运行时抛出异样,这种是计划显著优于应用 Object 类的 clone
办法克隆对象。让问题在编译的时候裸露进去总是好过把问题留到运行时。

字节流和字符流的区别

字节流在 JDK1.0 中就被引进了,用于操作蕴含 ASCII 字符的文件。JAVA 也反对其余的字符如 Unicode,为了读取蕴含 Unicode 字符的文件,JAVA 语言设计者在 JDK1.1 中引入了字符流。ASCII 作为 Unicode 的子集,对于英语字符的文件,能够能够应用字节流也能够应用字符流。

字节流有了为啥还要有字符流

字符流是由 Java 虚拟机将字节转换失去的,问题就出在这个过程还算是十分耗时,并且,如果咱们不晓得编码类型就很容易呈现乱码问题。所以,I/O 流就罗唆提供了一个间接操作字符的接口,不便咱们平时对字符进行流操作。如果音频文件、图片等媒体文件用字节流比拟好,如果波及到字符的话应用字符流比拟好。

FileInputStream 和 FileOutputStream 是什么?

这是在拷贝文件操作的时候,常常用到的两个类。在解决小文件的时候,它们性能体现还不错,在大文件的时候,最好应用 BufferedInputStream (或 BufferedReader) 和 BufferedOutputStream (或 BufferedWriter)

Files 的罕用办法都有哪些?

  • Files. size():查看文件个数。
  • Files. read():读取文件。
  • Files. write():写入文件。
  • Files. exists():检测文件门路是否存在。
  • Files. createFile():创立文件。
  • Files. createDirectory():创立文件夹。
  • Files. delete():删除一个文件或目录。
  • Files. copy():复制文件。
  • Files. move():挪动文件。
正文完
 0