精选10道javaio面试题,赶快收藏起来

1、IO里面的常见类,字节流、字符流、接口、实现类、方法阻塞?

输入流就是从外部文件输入到内存,输出流主要是从内存输出到文件。

IO里面常见的类,第一印象就只知道IO流中有很多类,IO流主要分为字符流和字节流。字符流中有抽象类InputStream和OutputStream,它们的子类FileInputStream,FileOutputStream,BufferedOutputStream等。字符流BufferedReader和Writer等。都实现了Closeable,Flushable,Appendable这些接口。程序中的输入输出都是以流的形式保存的,流中保存的实际上全都是字节文件。

java中的阻塞式方法是指在程序调用改方法时,必须等待输入数据可用或者检测到输入结束或者抛出异常,否则程序会一直停留在该语句上,不会执行下面的语句。比如read()和readLine()方法。

2、谈谈对NIO的认知?

对于NIO,它是非阻塞式,核心类:

1.Buffer为所有的原始类型提供(Buffer)缓存支持。

2.Charset字符集编码解码解决方案

3.Channel一个新的原始I/O抽象,用于读写Buffer类型,通道可以认为是一种连接,可以是到特定设备,程序或者是网络的连接。

3、字节流和字符流的区别?

字符流和字节流的使用非常相似,但是实际上字节流的操作不会经过缓冲区(内存)而是直接操作文本本身的,而字符流的操作会先经过缓冲区(内存)然后通过缓冲区再操作文件

以字节为单位输入输出数据,字节流按照8位传输

以字符为单位输入输出数据,字符流按照16位传输

4、NIO和传统的IO有什么区别?

1、传统IO一般是一个线程等待连接,连接过来之后分配给processor线程,processor线程与通道连接后如果通道没有数据过来就会阻塞(线程被动挂起)不能做别的事情。NIO则不同,首先,在selector线程轮询的过程中就已经过滤掉了不感兴趣的事件,其次,在processor处理感兴趣事件的read和write都是非阻塞操作即直接返回的,线程没有被挂起。

2、传统io的管道是单向的,nio的管道是双向的。

3、两者都是同步的,也就是java程序亲力亲为的去读写数据,不管传统io还是nio都需要read和write方法,这些都是java程序调用的而不是系统帮我们调用的,nio2.0里这点得到了改观,即使用异步非阻塞AsynchronousXXX四个类来处理。

5、BIO和NIO和AIO的区别以及应用场景?

同步:java自己去处理io。

异步:java将io交给操作系统去处理,告诉缓存区大小,处理完成回调。

阻塞:使用阻塞IO时,Java调用会一直阻塞到读写完成才返回。

非阻塞:使用非阻塞IO时,如果不能立马读写,Java调用会马上返回,当IO事件分发器通知可读写时在进行读写,不断循环直到读写完成。

BIO:同步并阻塞,服务器的实现模式是一个连接一个线程,这样的模式很明显的一个缺陷是:由于客户端连接数与服务器线程数成正比关系,可能造成不必要的线程开销,严重的还将导致服务器内存溢出。当然,这种情况可以通过线程池机制改善,但并不能从本质上消除这个弊端。

NIO:在JDK1.4以前,Java的IO模型一直是BIO,但从JDK1.4开始,JDK引入的新的IO模型NIO,它是同步非阻塞的。而服务器的实现模式是多个请求一个线程,即请求会注册到多路复用器Selector上,多路复用器轮询到连接有IO请求时才启动一个线程处理。

AIO:JDK1.7发布了NIO2.0,这就是真正意义上的异步非阻塞,服务器的实现模式为多个有效请求一个线程,客户端的IO请求都是由OS先完成再通知服务器应用去启动线程处理(回调)。

应用场景:并发连接数不多时采用BIO,因为它编程和调试都非常简单,但如果涉及到高并发的情况,应选择NIO或AIO,更好的建议是采用成熟的网络通信框架Netty。

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

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

序列化的实现:将需要被序列化的类实现Serialize接口,没有需要实现的方法,此接口只是为了标注对象可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,再使用ObjectOutputStream对象的write(Objectobj)方法就可以将参数obj的对象写出

7、PrintStream、BufferedWriter、PrintWriter的比较?

1、PrintStream类的输出功能非常强大,通常如果需要输出文本内容,都应该将输出流包装成PrintStream后进行输出。它还提供其他两项功能。与其他输出流不同,PrintStream永远不会抛出IOException;而是,异常情况仅设置可通过checkError方法测试的内部标志。另外,为了自动刷新,可以创建一个PrintStream

2、BufferedWriter:将文本写入字符输出流,缓冲各个字符从而提供单个字符,数组和字符串的高效写入。通过write()方法可以将获取到的字符输出,然后通过newLine()进行换行操作。BufferedWriter中的字符流必须通过调用flush方法才能将其刷出去。并且BufferedWriter只能对字符流进行操作。如果要对字节流操作,则使用BufferedInputStream

3、PrintWriter的println方法自动添加换行,不会抛异常,若关心异常,需要调用checkError方法看是否有异常发生,PrintWriter构造方法可指定参数,实现自动刷新缓存(autoflush)

8、什么是节点流,什么是处理流,各有什么好处,处理流的创建有什么特征?

节点流直接与数据源相连,用于输入或者输出

处理流:在节点流的基础上对之进行加工,进行一些功能的扩展

处理流的构造器必须要传入节点流的子类

9、什么是IO流?

它是一种数据的流从源头流到目的地。比如文件拷贝,输入流和输出流都包括了。输入流从文件中读取数据存储到进程(process)中,输出流从进程中读取数据然后写入到目标文件。

10、有哪些可用的Filter流?

在java.io包中主要由4个可用的filterStream。两个字节filterstream,两个字符filterstream.分别是FilterInputStream,FilterOutputStream,FilterReaderandFilterWriter.这些类是抽象类,不能被实例化的。

2020年Java项目面试题及答案

经典Java面试题集锦

2020经典Java面试题集

一套2020java最新面试题及答案

学编程的学费一般是多少费用?

学Java六个月感觉啥也不会?不要担心,让我来帮助你!

学Java可以从事什么工作,职业发展无限可能!

0基础0学费15天面授

有基础直达就业

工作1~3年,加薪神器

工作3~5年,晋升架构

初级202925

初级203221

初级202629

初级203743

答:零基础学Java不要盲目,可以先尝试自己适不适合...查看回答

THE END
1.字符流与字节流的区别在于()字符流与字节流的区别在于( ) A.前者带有缓冲,后者没有 B.前者是块读写,后者是字节读写 C.二者没有区别,可以互换使用 D.每次读写的字节数不同点击查看答案&解析进入小程序搜题你可能喜欢关于芳香疗法的注意事项,下列说法不正确的是( ) A. 不同个体对精油的敏感度相同 B. 根据患者的喜好选择精油 C. 纯...https://m.ppkao.com/wangke/daan/a448a039706648d5bec5280f01a4b069
2.2023年Java面试八股文(25w字)字节流如何转为字符流? 字符流与字节流的区别? BIO、NIO、AIO的区别? Java IO都有哪些设计模式? 二.集合 1. 常见的集合有哪些? 2. 线程安全的集合有哪些?线程不安全的呢? 3. Arraylist与 LinkedList 异同点? 4. ArrayList 与 Vector 区别? 5. 说一说ArrayList 的扩容机制? http://www.wjks.cn/news/3243.html
3.2.8W字Java基础学习和书籍推荐,真正意义上的从0到1学Java,才不是...数据范围与字节数不一定相关,例如 float 数据范围比 long 更加广泛,但是 float 是 4 字节,1ong 是 8 字节。 浮点型可能只是一个近似值,并非精确的值。 浮点数当中默认类型是 double。如果一定要使用 float 类型,需要加上一个后缀 F。 字符串不是基本类型,而是引用类型 ...https://xie.infoq.cn/article/544fc74928cf356576a3d0c58
4.字节流字符流及其转换比较与使用嘲在程序中所有的数据都是以流的方式进行传输和保存的。程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成。 在java.io包中操作文件内容的主要有两大类:字节流、字符流。两类都分为输入和输出操作。输入流基本方法是读,输出流基本方法是写。 https://www.jianshu.com/p/d6951279a947
5.Java程序设计期末考试题库(带答案).docxA、语法检查B、堆栈上/下溢检查C、字节编译D、内存跟踪答案:D145.字符流与字节流的区别在于()。A、每次读写的字节数不同B、前者是块读写,后者是字节读写C、前者带有缓冲,后者没有D、二者没有区别,可以互换使用答案:A146.分析选项中关于Java中this关键字的说法正确的是()。A、this关键字和类关联,而不是和...https://www.renrendoc.com/paper/231500487.html
1.详解Java中字符流与字节流的区别理解Java中字符流与字节流的区别 浏览:0 1. 什么是流Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列。和水流一样,Java中的流也具有一个“流动的方向”,通常可以从中读入一个字节序列的对象被称为输入流;能够向其写入一个字节序列的对象被称为输出流。 https://download.csdn.net/download/weixin_38700320/12798297
2.一个字符是几个字节字符与字节有什么区别?“字节流”与“字符流”有什么区别? 字节流和字符流的主要区别在于它们的处理方法。字节流是最基本的,采用ASCII编码。InputStream和OutputStream的所有子类都主要用于处理二进制数据,二进制数据是按字节处理的,而现实中很多数据是文本,并提出了字符流的概念,采用Unicode编码。它根据虚拟机的编码方式进行处理,即对字符集...http://www.zzfmdn.com/article/964593
3.Java期末简答题(论述题)以及几个编程题(常考)字节流字符流区别: 流: 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成。 区别:字节流在操作的时候本身是不会用到缓冲区(内存)的,是与文件本身直接操作的,而字符流在操作的时候是使用到缓冲区的 字节流在操...https://cloud.tencent.com/developer/article/1779606
4.历尽数月,终于整理出一份让你涨薪8K的Java基础面试题解析十一、拷贝文件的工具类使用字节流还是字符流 答案:字节流 1. 什么是字节流,什么是字符流? 字节流:传递的是字节(二进制), 字符流:传递的是字符 2. 答案 我们并不支持下载的文件有没有包含字节流(图片、影像、音源),所以考虑到通用性,我们会用字节流。 https://maimai.cn/article/detail?fid=1401406558&efid=vJY_lZ-k7cqLTm0zfujhEg
5.JavaIO流(精讲)包含练习题及答案51CTO博客输入流: 只能从中读取数据,而不能向其写入数据。 输出流:只能向其写入数据,而不能向其读取数据。 按照操作单元划分,可以划分为字节流和字符流。 字节流和字符流的用法几乎完成全一样,区别在于字节流和字符流所操作的数据单元不同,字节流操作的单元是数据单元是8位的字节,字符流操作的是数据单元为16位的字符。https://blog.51cto.com/laoshifu/4988605
6.JavaIO面试题及答案整理汇总1、字节流和字符流的区别? 答:读字节流时,读一个字节后返回一个字节;字节流使用字节流读取一个或多个字节(中文对应的字节数为两个,在 UTF-8 码表中是 3 字节)时间。首先检查指定的编码表,并返回找到的字符。字节流可以处理图片、MP3、AVI视频文件等各种类型的数据,而字符流只能处理字符数据。除了字节流,只要...https://www.tulingxueyuan.cn/tlzx/jsp/1437.html