您的位置:首页 > 文旅 > 旅游 > 【面经总结】Java基础 - IO

【面经总结】Java基础 - IO

2024/12/22 13:07:52 来源:https://blog.csdn.net/wmh1024/article/details/139647172  浏览:    关键词:【面经总结】Java基础 - IO

序列化

什么是序列化和反序列化?

序列化:将对象转换为二进制数据

反序列化:将二进制数据转换为对象

  • 目的:方便网络传输、持久化保存

Java 是怎么实现序列化的?

Java 通过对象输入输出流来实现序列化和反序列化,对象序列化不会关注类中的静态变量。

Java 的序列化过程:

  1. 对象及其属性都要必须属于 EnumArraySerializable
  2. 类中需要存在 serialVersionUID 字段,用来标明版本。
  3. 使用 ObjectOutputStream 进行序列化。
/*** 序列化*/
private static void serialize(String filename) throws IOException {File f = new File(filename);// 文件输出流OutputStream out = new FileOutputStream(f); // 对象输出流ObjectOutputStream oos = new ObjectOutputStream(out); // 保存对象oos.writeObject(new Person("Jack", 30, Sex.MALE)); oos.close();out.close();
}/*** 反序列化*/
private static void deserialize(String filename) throws IOException, ClassNotFoundException {File f = new File(filename);// 文件输入流InputStream in = new FileInputStream(f); // 对象输入流ObjectInputStream ois = new ObjectInputStream(in); // 读取对象Object obj = ois.readObject();ois.close();in.close();System.out.println(obj);
}

img

可以使用 transient 关键字忽略掉某些字段

transient private Integer age = null;

常见的序列化协议有哪些?

  1. 二进制序列化
    1. Java 原生序列化:不能跨语言,性能较差,要求多
    2. Protobuf:Google 数据标准
    3. Thrift:Apache 开源项目
    4. Hessian
    5. Kryo
    6. FST
  2. Json 序列化
    1. Fastjson:阿里
    2. Jackson
    3. Gson:Google

网络 I/O

https://www.bilibili.com/video/BV1Lg4y1u7KW/

BIO/NIO/AIO 有什么区别?

  1. BIO(同步阻塞 IO):在读、写动作完成之前,线程会一直阻塞在那里,线性调用。
    1. BIO 会阻塞线程,一个连接一个线程。已经建立 Socket 连接后不能再与其他客户端连接。
    2. BIO 可以使用多线程和线程池优化

img

  1. NIO(同步非阻塞 IO):使用后台线程执行IO,前台线程轮询查看状态。
    1. NIO 性能消耗大,需要频繁轮询。
    2. 可以通过 I/O 多路复用优化

img

  1. AIO(异步非阻塞 IO):基于事件和回调机制,后台处理完成后,会通知相应线程进行后续工作。

img

I/O 多路复用是什么?

操作系统提供了一系列系统调用(select、poll、epoll),可以同时监控多个 fd 文件描述符(批量轮询)。

select 和 epoll 有什么区别?

select 的问题:

  1. 最大连接数有限
  2. 返回后通过遍历所有的 fd,找出就绪的 fd 进行下一步操作

epoll 的优势:

  1. 最大连接数无限
  2. 通过事件回调返回就绪的 fd

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com