常规面试题-6.输入和输出流

2021-12-03
7

1.Java IO流的实现机制是什么?

流的本质是数据传输,根据处理数据类型的不同,流可以分为两大类:字节流和字符流。
字节流以字节(8 bit)为单位,包括两个抽象类:InputStream 和 OutputStream
字符流以字符(16 bit)为单位,根据码表映射字符,一次可以读多个字节,它包含两个抽象类:Reader和Writer。
其主要区别是:字节流在处理输入输出时不会用到缓存,而字符流用到了缓存。
流的主要作用是为了改善程序性能并且使用方便。

2.管理文件和目录的类是什么

1.File(String pathname) 根据指定的路径创建一个File对象
2.createNewFile() 若目录或文件存在,则返回false;否则创建文件或文件夹
3.delete() 删除文件或文件夹
4.isFile() 判断这个对象是不是文件
5.isDirectory() 判断这个对象是否表示文件夹
6.listFiles() 若对象代表目录,则返回所有文件的File对象
7.mkdir() 根据当前指定的路径创建目录
8.exists() 判断对象对应的文件是否存在

3.Java Socket

Socket被称为套接字,可以用来实现不同虚拟机或不同计算机之间的通信。在JAVA中,Socket分为两种类型:面向连接的Socket通信协议(TCP)、面向无连接的Socket通信协议(UDP)。任何一个Socket都是由IP地址和端口号唯一确定的。
通信过程如下:
首先、Server(服务器)端Listen(监听)指定的某个端口(建议使用大于1024的端口)是否有连接请求
其次、Client(客户)端向Server端发出Connect(连接)请求
最后、Server端向Client端发挥Accept(接受)请求

Socket的生命周期可以分为3各阶段:1.打开Socket 2.使用Socket收发数据和关闭Socket 3.关闭Socket

4.JAVA序列化

1.序列化(Serialization)
在分布式环境下,当进行远程通信时,无论是何种类型的数据,都会以二进制序列的形式在网络上传送。序列化是一种将对象以一连串的字节描述的过程,用于解决在对对象流进行读写操作是所引发的问题。序列化可以将对象的状态写在流里进行网络传输,或者保存到文件、数据库等系统里,并在需要时把流读取出来重新构造一个相同的类。
所有要实现序列化的类都必须实现呢Serializable接口,Serializable接口位于java.lang包中,它里面没有包含任何方法。使用一个输出流(例如FileOutputStream)来构造一个ObjectOutputStream(对象流)对象。紧接着,使用该对象write() Object(Object obj)就可以将obj对象写出(保存其状态),要恢复时可以使用其对应的输入流。
序列化的特点:
1.如果一个类能被序列化,那么它的子类也能够被序列化。
2.由于static和transient 代表对象的临时数据,因此被声明为这两种类型的数据成员是不能够被序列化的。

序列化的使用会影响系统的性能,如果不是必须要使用序列化,应尽量不使用序列化。以下情况时需要使用序列化:
1.通过网络来发送对象,或对象的状态需要被持久化到数据库或文件中。
2.序列化能实现深层复制,即可以复制引用的对象。

5.反序列化

它将流转换为对象。在序列化和反序列化过程中,serialVersionUID起着非常重要的作用,每个类都有一个特定的serialVersionUID来判定类的兼容性。如果待序列化的对象与目标对象的serialVersionUID不同,那么反序列化就会抛出InvalidClassException异常。一个好的编程习惯,最好在被序列化的类中显式地声明serialVersionUID(该字段定义为static final)。自定义有以下优点:
1.提高程序运行效率
2.提高程序不同平台的兼容性
3.增强各个版本兼容性

6.外部序列化

外部序列化与内部序列化主要区别是序列化是内置的API,只需要实现serializable接口,开发人员不需要任何代码就可以实现对象的序列化,而使用外部序列化时,Externalizable接口中的读写方法必须由开发人员来实现。

评论