Java小李备春招|IO

Java小李备春招|IO

Java小李备春招系列文章:
1. Java小李备春招|JVM
2. Java小李备春招|面向对象
3. Java小李备春招|常用API
4. Java小李备春招|异常
5. Java小李备春招|集合
6. Java小李备春招|IO
7. Java小李备春招|计算机网络

  1. 流的分类。
    Java流按照流向可分为输入流和输出流,按照处理数据单元可分为字节流和字符流。所以大致上可以将流分为:字节输入流(InputStream)、字节输出流(OutputStream)、字符输入流(Reader)和字符输出流(Writer)。

  2. File类常用方法及注意事项。
    1)createNewFile():创建新文件,需保证前置路径必须存在(没有会抛出IOException);
    2)delete():删除文件或目录。如果删除一个目录,则该目录必须为空;
    3)mkdir():创建目录,需保证前置路径必须存在;
    4)mkdirs():创建目录,且可以创建不存在的父级目录;
    5)listFiles():返回一个抽象路径名数组,表示该抽象路径名下目录中的文件,如果此抽象路径名不表示目录,则返回null。

  3. 递归删除文件夹。

public void deleteFiles(File file) {
	File[] files = file.listFiles();
	if (files != null && files.length != 0){
    // 当前路径表示一个非空目录
		for (int i = 0;i < files.length;i ++){
			this.deleteFiles(file);
		}
	}
	file.delete();
}
  1. 什么是序列化和反序列化?如何实现对象序列化?
    序列化和反序列化是进行数据存储和数据传输的一种方式。对象序列化是将对象转换为字节的过程;对象反序列化是将字节转换为对象的过程。实现对象序列化,需要对象类实现serializable接口。

  2. 在实现序列化接口时一般会生成serialVersionUID字段,作用是什么?
    private static final long serialVersionUID是该类的序列号,当对象配拆解后需通过序列号区分对象和类是否匹配,如果对象序列号和类序列号一致,则证明该对象就是此类的对象,反之则不然。如果实现serializable接口的类没有添加serialVersionUID字段,系统则会按照类中属性的个数和类型为该类分配一个默认序列号,但当类中属性发生修改时,会导致已序列化的对象与类不匹配。

  3. transient关键字的作用?
    transient关键字用于序列化操作中对不需要序列化字段的修饰,在序列化操作中,static和transient修饰的关键字不能够被序列化。

  4. 说一下IO和NIO的区别。
    IO是面向流的阻塞式IO模型,NIO是面向缓冲区(Buffer)的非阻塞式IO模型。面向流意味着只能顺序从流中读取数据,如果需要跳过一些字节或重复读取字节,就必须从流中将读取的数据先缓存起来;而面向Buffer时,数据会被读/写到buffer中,根据用户需要读取某一位置的数据,提高了程序的灵活性。但是除了读/写数据,还需要检查数据是否全部存入buffer中并保证更多数据进入时,未处理的数据不会被覆盖。

  5. 简单说一下NIO中的核心对象。
    NIO的核心对象包括:缓冲区(Buffer)、通道(Channel)、选择器(Selector)。
    缓冲区(Buffer)实际上是一个容器对象(就是个数组)。在NIO库中,所有数据都是用缓冲区处理的。在读取/写入数据时,它被直接读到/写入缓冲区中。任何时候访问 NIO 中的数据,都是将它放到缓冲区中;
    通道(Channel)是一个对象,通过它可以读取和写入数据,但所有数据都是通过Buffer对象来处理。也就是说,在操作数据时,通过通道将数据写入缓存区,再通过缓存区获取数据;
    选择器(Selector)能够检测多个注册的通道上是否有事件发生,如果有事 件发生,便获取事件然后针对每个事件进行相应的响应处理。这样一来,只是用一个单线程就可 以管理多个通道,也就是管理多个连接。这样使得只有在连接真正有读写事件发生时,才会调用 函数来进行读写,就大大地减少了系统开销,并且不必为每个连接都创建一个线程,不用去维护 多个线程,并且避免了多线程之间的上下文切换导致的开销。

发布了8 篇原创文章 · 获赞 4 · 访问量 477
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览