Java面试复习5 IO和流

Java面试复习5 IO和流

声明:本面试复习都基于一本未署名的Java面试宝典所述,根据自己的理解写出了这一专栏的复习博客

  1. 介绍一下Java中都有哪几种流?

    流的分类

    按照流向

    1. inputStream 输入流:读取外部数据 ,
    2. outputStream 输出流:写出内部数据

    按照实现功能节点流处理流

    1. 节点流(文件流)(:可以直接从或者向某一个节点(或者说数据源,目的地)读写数据,如FileReader,FileWriter就是对文件的读写
      在这里插入图片描述
    2. 处理流不直接连接到数据源或目的地,而是“连接” 在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。比较常用的需要知道的比如说缓冲流就属于处理流的一部分(提供一个8Kb的缓冲区)

    按照处理数据的单位字节流8bit字符流16bit

    1. 字节流基于InputStream和outputStream
    2. 字符流基于Reader和Writer。
      可以按照流向更加细化,如字节输入流,字节输出流等等。具体如下:
      在这里插入图片描述
    3. Java的IO流共涉及40多个类,实际上非常规则,都是从上述4个抽象基类派生的。
    4. 由这四个类派生出来的子类名称都是以其父类名作为子类名后缀。

    在这里插入图片描述

    在这里插入图片描述

  2. 字节流如何转为字符流?
    字节输入流转字符输入流通过InputStreamReader实现,该类的构造函数可以传入InputStream对象。
    字节输出流转字符输出流通过OutputStreamWriter实现,该类的构造函数可以传入OutputStream对象。

    这里就是所说的转换流。
    所谓转换流就是Java API提供的连个转换流,实现字节流和字符流之间的转换
    在这里插入图片描述

  3. 如何将一个Java对象序列化到文件中

    首先我们需要理解,什么是序列化要实现序列化,首先要让该类实现serializable接口,这个接口其实是一个空的接口,也就是这个接口中没有任何方法,这个接口的作用主要是标识作用,让JVM知道实现着接口的类需要序列化。
    在网上查阅相关博客的时候,我发现了一个比较有趣的说法:这个serializable接口实际上就相当于是一个提示,比如说你现在有个问题没法解决,但是你又不说,就没人知道你的问题,这时候你举手示意某个技术大牛来帮助你,他就来了,而这个“举手”的动作实际上就是一个标识,serializable接口同样的,你要实现序列化,但是JVM不知道你要实现序列化,你想让JVM知道,就得有个标识,serializable接口的作用就是如此。

    在实现接口后,我们就可以在类中编写代码了,对于对象的写出文件,我们用对象输出流。

    在这里插入图片描述
    在这里插入图片描述

  4. 字节流和字符流的区别

    字节流操作字节,比如: .mp3, .avi, .rmvb, mp4, .jpg, .doc, .ppt
    字符流操作字符,只能操作普通文本文件。 最常见的文本文件: .txt, .java, .c, .cpp 等语言的源代码。尤其注意 .doc,excel,ppt这些不是文本文件
    在这里插入图片描述

  5. 如何实现对象克隆

    在这里插入图片描述
    第一种方式复习一里有明确叙述,这里主要说第二种方式。
    作者解答:

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  6. 什么是Java序列化,如何实现序列化?

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

    序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的, 然后 使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象, 接着 ,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。
    参考博文:https://www.cnblogs.com/yangchunze/p/6728086.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值