关于IO流的笔试面试题[通俗易懂]

关于IO流的笔试面试题[通俗易懂]1.java中有几种类型的流?jdk为每种类型的流提供了一些抽象类以供继承,请说出它们分别是什么?解题思路:了解io流的体系(重要)就可以了从大的方面来分可以分为字节流和字符流.字符流提供了提供了reader和writer;字节流提供了outputstream 和inputstream. 2.字符流和字节流有什么区别?(重要)解题思路:从读写的原理上来进行区分会好记一点(字符流…

大家好,又见面了,我是你们的朋友全栈君。

1.java中有几种类型的流?jdk为每种类型的流提供了一些抽象类以供继承,请说出它们分别是什么?

解题思路:了解io流的体系重要就可以了

从大的方面来分可以分为字节流和字符流.字符流提供了提供了reader和writer;字节流提供了outputstream 和inputstream.

 

2.字符流和字节流有什么区别?重要

解题思路:从读写的原理上来进行区分会好记一点(字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符、字符数组或字符串而字节流处理单元为 1 个字节,操作字节和字节数组。所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,如果是音频文件、图片、歌曲,就用字节流好点避免数据丢失);如果是关系到中文(文本)的,用字符流好点

字符流以字符或者字符数组的形式读写数据,只能读写二进制文件;字节流能读写各种类型的数据.

 

3.什么是java序列化,如何实现java序列化?重要

解题思路:像这样的题,一般先做名词解释,然后阐述作用和使用方法

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

注解:当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。

  将需要序化的类实现Serializable接口就可以了,该接口没有任何方法,可以理解为一个标记,即表明这个类可以序列化。注意的是被关键字static、transient修饰的变量不能被序列化。在被序列化后,transient修饰的变量会被设为初始值。如int型的是0、对象型的是null.

1.概念

  序列化:把Java对象转换为字节序列的过程。
  反序列化:把字节序列恢复为Java对象的过程。

2.用途

对象的序列化主要有两种用途:
1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;
2) 在网络上传送对象的字节序列。

 

4.什么是比特(Bit),什么是字节(Byte),什么是字符(Char),它们长度是多少,各有什么区别一般是笔试题的选择题里面出的多一点

Bit是最小的传输单位,byte是最小的存储单位,1byte=8bit,char 是一种基本数据类型,1char=2byte.

 

5.BufferedReader属于哪种流,它主要是用来做什么的,它里面有那些经典的方法

解题思路:望文知意,Reader是字符流,而buffer是缓冲的作用,缓冲区是基于内存的,起到读写高效的作用;所以BufferedReader是高效字符流

BufferedReader是字符流,也是一种包装流,用来增强reader流.主要用来读取数据的,最经典的方法是readline,可以一次读一行,是reader不具备的.

 

6.什么是节点流,什么是处理流,它们各有什么用处,处理流的创建有什么特征

节点流: 直接与数据源相连,用于输入或者输出
处理流:在节点流的基础上对之进行加工,进行一些功能的扩展
处理流的构造器必须要传入节点流的子类

 

7.如果我要对字节流进行大量的从硬盘读取,要用那个流,为什么?

解题思路:因为明确说了是对字节流的读取,所以肯定是inputstream或者他的子类,又因为要大量读取,肯定要考虑到高效的问题,自然想到缓冲流。

用BufferedInputStream,原因:BufferedInputStream是InputStream的缓冲流,使用它可以防止每次读取数据时进行实际的写操作,代表着使用缓冲区。不带缓冲的操作,每读一个字节就要写入一个字节,由于涉及磁盘的IO操作相比内存的操作要慢很多,所以不带缓冲的流效率很低。带缓冲的流,可以一次读很多字节,但不向磁盘中写入,只是先放到内存里。等凑够了缓冲区大小的时候一次性写入磁盘,这种方式可以减少磁盘操作次数,速度就会提高很多!并且也可以减少对磁盘的损伤。

 

8.如果我要打印出不同类型的数据到数据源,那么最适合的流是那个流,为什么?

解题思路:要考虑到打印的问题,就要用到打印输出流(printstream操作字节流;或者是PrintWriter操作字符流)

用printstream,因为只有字节流才能读写各种类型的数据.

 

9.怎么样把输出字节流转换成输出字符流,说出它的步骤?

解题思路:把字节流转成字符流,这里肯定就要用到适配器模式,很自然的要想到outputstreamwriter继承了Writer接口,但要创建它必须在构造函数中传入一个outputstream的实例,outputstreamwriter的作用也就是将outputstream适配到Writer实现了Reader接口,并且持有了InputStream的引用。关于适配器的作用,可以想一下电脑转接头的例子

利用转换流outputstreamwriter.创建一个字节流对象,将其作为参数传入转换流outputstreamwriter中,得到字符流对象.

 

10.什么叫对象序列化,什么是反序列化,实现对象序列化需要做哪些工作?

对象序列化:将对象以二进制的形式保存到硬盘上;

反序列化:将二进制文件转化为对象读取.

将需要序化的类实现Serializable接口

 

11.说说你对io流的理解

解题思路:个人觉得,可以讲io流的作用和体系

io流就相当于读写数据的一个管道.主要分为输入流和输出流,分别对应读数据和写数据.

 

12.谈一谈io流中用到的适配器模式和装饰者模式

解题思路:首先,要知道装饰者模式和适配器模式的作用;其次,可以自己举个例子把它的作用生动形象地讲出来;最后,简要说一下要完成这样的功能需要什么样的条件。

装饰器模式:就是动态地给一个对象添加一些额外的职责(对于原有功能的扩展)。

1.它必须持有一个被装饰的对象(作为成员变量)。

2.它必须拥有与被装饰对象相同的接口(多态调用、扩展需要)。

3.它可以给被装饰对象添加额外的功能。

比如,在io流中,FilterInputStream类就是装饰角色,它实现了InputStream类的所有接口,并持有InputStream的对象实例的引用,BufferedInputStream是具体的装饰器实现者,这个装饰器类的作用就是使得InputStream读取的数据保存在内存中,而提高读取的性能。

适配器模式:将一个类的接口转换成客户期望的另一个接口,让原本不兼容的接口可以合作无间。

1.适配器对象实现原有接口

2.适配器对象组合一个实现新接口的对象

3.对适配器原有接口方法的调用被委托给新接口的实例的特定方法(重写旧接口方法来调用新接口功能。)

比如,在io流中, InputStreamReader类继承了Reader接口,但要创建它必须在构造函数中传入一个InputStream的实例,InputStreamReader的作用也就是将InputStream适配到Reader。 InputStreamReader实现了Reader接口,并且持有了InputStream的引用。这里,适配器就是InputStreamReader类,而源角色就是InputStream代表的实例对象,目标接口就是Reader类。

适配器模式主要在于将一个接口转变成另一个接口,它的目的是通过改变接口来达到重复使用的目的;而装饰器模式不是要改变被装饰对象的接口,而是保持原有的接口,但是增强原有对象的功能,或改变原有对象的方法而提高性能。

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/129941.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • MySQL 日期格式时间戳转换函数

    MySQL 日期格式时间戳转换函数简介方便查看函数功能,特摘录在此。平时比较常用的时间、字符串、时间戳之间的互相转换,虽然常用但是几乎每次使用时候都喜欢去搜索一下用法;本文将作为一个笔记,整理一下三者之间的转换(即:date转字符串、date转时间戳、字符串转date、字符串转时间戳、时间戳转date,时间戳转字符串)用法,方便日后查看;涉及的函数date_format(date,format)函数,MySQ…

    2022年6月21日
    48
  • drone无人机app下载苹果版_drone无人机教程视频

    drone无人机app下载苹果版_drone无人机教程视频目录文章目录目录摘要1.实例化无人机及地面站控制对象2.绑定服务3.增加连接点击事件及进行连接摘要本节主要记录HelloDrone的连接过程及Mavlink协议解析过程。1.实例化无人机及地面站控制对象核心内容:controlTower=newControlTower(context);drone=newDrone(context);@Override/***重写onCreate方法,在onStart方法之前启动*/pro

    2022年8月15日
    7
  • 第926期机器学习日报(2017-04-01)

    第926期机器学习日报(2017-04-01)机器学习日报2017-04-01自然语言生成任务全面综述@阿儁是个nerd深度学习进行目标识别的资源列表@爱可可-爱生活物体检测算法全概述:从传统检测方法到深度神经网络框架@爱可可-爱生活PyTorch资源大列表@爱可可-爱生活解密滴滴大数据和人工智能@新智元@好东西传送门出品,由@AI100运营,过往目录见http://ml.memect.com订阅:

    2022年5月9日
    39
  • 优惠券设计及流程_优惠券怎么设计

    优惠券设计及流程_优惠券怎么设计在整个APP开发产品发展的整个周期中,运营活动必不可少,而发放优惠券已成为运营活动的一种基本形式,而关于优惠券设计的整体流程尤为重要。接下来,分享一下自己的经验,希望对大家有帮助,感谢支持!整体架构

    2022年8月1日
    6
  • 算法—时间复杂度[通俗易懂]

    算法—时间复杂度[通俗易懂]附录log对数:等差数列什么是等差数列?一般地,如果一个数列从第2项起,后一项与它的前一项的差等于同一个常数,那麽这个数列就叫做等差数列。这个常数叫做等差数列的公差,公差通常用字母d表示。例1:初识。-{1,3,5,7,9}公差为2-{5,15,25,35,45}公差为10-{2,68,134,200,266}公差为66-{5…

    2022年5月14日
    53
  • 俞敏洪沉默,新东方落泪

    俞敏洪沉默,新东方落泪据传,早些年以新东方三位创始人创业为主线故事,风靡一时的电影《中国合伙人》开拍前,剧组曾向电影男主角的原型人物俞敏洪,提出了友好交流的请求。俞敏洪提出最大的意见是:可不可以别把我拍得这么“土鳖”?几十年来,号称农村出身的寒门子弟俞敏洪,其身份发生了重大变化。在公开场合里,他对自己的身世表露出深深的自卑。另一方面,他又被誉为中国留学教父,俨然成为一个农村“凤凰男”逆袭成精英阶级的典型代表。当然,俞敏洪还是新东方的创始人,中国商业洪流里响当当的传奇。“我吃一碗兰州拉面都很开心”。可就是这样一个人,对财

    2025年11月7日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号