io流总结和面试题

多线程总结和面试题

1)file类:

主要是用于访问文件和目录,不能对文件内容进行访问(对于file能新建,删除,重命名文件和目录)。

2)Java的io类分类:

有字节流和字符流。
有节点流和处理流。

3)字节流/字符流:

字节流的输入 inputstream的方法read() , read(byte[] b), read(byte[] b,int off,int len)。
字符流的输入 reader的方法read(), read(char[] a),read(char[] a,int off,int len。
字节流的输出 outputstream的方法write(), write(char[] /byte[] buff)。
字符流的输出 writer的方法write(String str),write(String str, int off,int len)。

4)对象序列化

对象序列化:对象序列化机制允许把Java对象转化为于平台无关的二进制流,允许把这种二进制流持久存储在磁盘中,
也可以通过把这种二进制序列传输到另一个网络节点。

1 实现对象序列化就得实现这俩个接口:

serializable和Externakizable。

2 对象序列化通过实现的流:

objectInputStream和objectOutputStream。

3对象的序列化算法:

1)对保存磁盘中的对象独有一个序列编号。
2)首先检查该对象是否经过被序列化,若没有被序列化,则它才会被序列化输出。
3)若该对象已经序列化过,则不在序列化,只是输出一个序列化的编。

5)自定义序列化

(方法一):实现接口serializable
1通过trasient关键字,可以使字段不去序列化。
2 writeObject()写入特定对象的实例状态。
readObject()恢复对象实例变量。
(方法二):实现接口Exteralizable
1 readExternal()序列化。
2 writeExternal()恢复序列化。

6)NIO

对Buffer相对于来说相当于一个容器,本质是一个数组。

buffer的子类有 ByteBuffer,LongBuffer,CharBuffer,IntBuffer等等
重要方法 1) flip()为取出数据做准备。
2)clear()为装入数据做准备。
3) put()放如数据。
4)get()取出数据。

channel是一个抽象类,它主要去读写数据

channel的方法map(),read(),write()。

7)不可变类

Charset处理字节序列和字符序列。
通过CharSet的对象newDecoder(),newEncoder()的方法获取charsetDecoder(),charsetEncoder对象。

以下面试题均是从网上找的

1)java中有几种类型的流?请说出他们分别是什么?

可以分成字节流和字符流   字节流 Inputstream和OutputStream
                                           字符流 reader和wirter

2)字符流和字节流的区别?

字符流处理的单元为2个字节的unicode字符,分别操作字符,字符数组和字符串。
字节流处理的单元为1个字节,操作字节,字节数组。
如果是音频文件,图片,歌曲就用字节流,如果是关系到中文(文本)的用字符流。

3)什么是序列化?

 序列化就是一种用来处理对象流的机制,所谓对象流也就是对象的内容进行流化(对象转化二进制)可以流化后的对象进行读写操作。也可以将流化的对象进行读写操作,也可以将流化后的对象传输于网络之间,序列化是为了解决在对对象流进行读写操作时引发的对象。
 用途
  1)把对象的字节序列永久地保存在硬盘上,通常存放在一个文件。
  2)在网络上传送对象的字节序列。

4)什么是比特(Bit),什么时字节(byte),什么时字符(char)他们长度是多少。

比特是最小的传输单位,字节是最小的存储单位,一个字符=2个字节=16比特。

5)BuffedReader属于那种流,它是用来做什么的,他的经典方法是什么。

BufferedReader属于那种字符流,它主要用来增强reader流,也是用来读取数据的,最经典的方法是readline(),一次读取一行,reader不具备。

6)什么是节点流,什么是处理流?

 节点流:直接与数据源相连,用于输入和输出。
 处理流:在节点流的基础上对于之前进行加工,进行一些功能的扩展。

7) 怎样把输出字节流转化成输出字符流?

 利用转化流,创建一字节流然后把字节流作为参数放到转化流OutputStreamWrite中得到字符流。

8)说说你对io流的理解?

  io流相对于一个读写数据的管道,主要分为输入流和输出流,进行读数据和写数据。

9)io流中使用到的装配者模式和适配器模式

 装饰者模式:就是动态的给一个对象添加一些额外的职责。
 适配器模式:将一个类的接口转化成客户期望的另一个接口,让原本不兼容的接口可以合作无间。

10)在io有哪些流?

 缓存流,转化流,对象流,推回输入流。

11)对于RandomAccessFile的理解?

  它可以读取文件内容,也可以输出数据到文件,他比较特殊可以访问文件中任意位置的数据,程序可以直接跳转到文件的任意的位置

12)在拷贝文件的时候,哪一种流可用于提升更多的性能?

   对于字节流可以使用BufferedInputStream和BufferedOutputStream。
   对于字符流可以使用BufferedReader和BufferedWriter。

13)什么是同步,什么是异步。

   同步:如果有多个任务和事件要发生,这些任务和事件必须逐个进行。
   异步:如果有多个任务和事件要发生,这些任务和事件可以并发执行。

14)什么是阻塞,什么是非阻塞?

   阻塞:当某个事件或者任务在执行过程中,它发出一个请求,如果改请求操作需要的条件不满足,那么一直就等待条件满足。
   非阻塞:当某个事件或者任务在执行过程中,它发出一个请求,如果请求操作需要的条件不满足,那么立即返回一个标志信息告知条件不满足,不会一直在等待。
  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值