Java之IO流面试题案例讲解

一、Java中IO流分为几种?

  • 按照流的流向分,可以分为输入流和输出流;
  • 按照操作单元分,可以分为字节流和字符流(字节流可以读写任何单位的数据,字符流只可以读写txt数据);
  • 按照流的角色分,可以分为节点流和处理流;

二、IO中flush()和close()的区别

close()方法具备刷新功能,在关闭流之前就会先刷新缓冲区,将缓冲区的字节全部刷新到文件上,在关闭流。(close()方法包含一次flush()方法)

flush()方法可以刷新,并且刷新之后可以继续写,而close()方法刷新之后就不能继续写了。

三、BIO、NIO、AIO有什么区别?

简答:

  • BIO:Block IO 同步阻塞式IO,就是我们平时使用的传统IO,特点是模式简单使用方便,但是并发处理能力低;
  • NIO:Non IO 同步非阻塞IO,传统IO的升级,客户端与服务端通过Channel(通道)通讯,实现了多路复用;
  • AIO:Asynchronous IO 异步非阻塞IO,异步IO的操作基于事件和回调机制。

详细回答:

  • BIO (Blocking I/O): 同步阻塞I/O模式,数据的读取写入必须阻塞在一个线程内等待其完成。在活动连接数不是特别高(小于单机1000)的情况下,这种模型是比较不错的,可以让每一个连接专注于自己的 I/O 并且编程模型简单,也不用过多考虑系统的过载、限流等问题。线程池本身就是一个天然的漏斗,可以缓冲一些系统处理不了的连接或请求。但是,当面对十万甚至百万级连接的时候,传统的 BIO 模型是无能为力的。因此,我们需要一种更高效的 I/O 处理模型来应对更高的并发量。
  • NIO (New I/O): NIO是一种同步非阻塞的I/O模型,在Java 1.4 中引入了NIO框架,对应 java.nio 包,提供了 Channel , Selector,Buffer等抽象。NIO中的N可以理解为Non-blocking,不单纯是New。它支持面向缓冲的,基于通道的I/O操作方法。 NIO提供了与传统BIO模型中的 Socket 和 ServerSocket 相对应的 SocketChannel 和 ServerSocketChannel 两种不同的套接字通道实现,两种通道都支持阻塞和非阻塞两种模式。阻塞模式使用就像传统中的支持一样,比较简单,但是性能和可靠性都不好;非阻塞模式正好与之相反。对于低负载、低并发的应用程序,可以使用同步阻塞I/O来提升开发速率和更好的维护性;对于高负载、高并发的(网络)应用,应使用 NIO 的非阻塞模式来开发
  • AIO (Asynchronous I/O): AIO 也就是 NIO 2。在 Java 7 中引入了 NIO 的改进版 NIO 2,它是异步非阻塞的IO模型。异步 IO 是基于事件和回调机制实现的,也就是应用操作之后会直接返回,不会堵塞在那里,当后台处理完成,操作系统会通知相应的线程进行后续的操作。AIO 是异步IO的缩写,虽然 NIO 在网络操作中,提供了非阻塞的方法,但是 NIO 的 IO 行为还是同步的。对于 NIO 来说,我们的业务线程是在 IO 操作准备好时,得到通知,接着就由这个线程自行进行 IO 操作,IO操作本身是同步的。查阅网上相关资料,我发现就目前来说 AIO 的应用还不是很广泛,Netty 之前也尝试使用过 AIO,不过又放弃了。

四、Files的常用方法有哪些?

  • Files.exist():检测文件路径是否存在
  • Files.createFiles():创建文件
  • Files.createDirectory():创建文件夹
  • Files.delete():删除一个文件或目录
  • Files.copy():复杂文件
  • Files.move():移动文件
  • Files.size():查看文件个数
  • Files.read():读取文件
  • Files.write():写入文件

到此这篇关于Java之IO流案例讲解的文章就介绍到这了,更多相关Java之IO流内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 基于javax.validation结合spring的最佳实践

    前言 本人先将用到的配置.工具类贴出来,然后一步步告诉大家怎么使用 JSR303 是一套JavaBean参数校验的标准,它定义了很多常用的校验注解,我们可以直接将这些注解加在我们JavaBean的属性上面,就可以在需要校验的时候进行校验了. 注解如下: Hibernate validator 在JSR303的基础上对校验注解进行了扩展,扩展注解如下: pom中添加注解 <!--jsr 303--> <dependency> <groupId>javax.validati

  • Java字节流和字符流总结IO流!

    目录 从接收输入值说起 字节流读取 字符流读取 Scanner 读取 什么是 IO 流 字节流和字符流 字节流 字节输入流 字节输出流 缓冲流的原理 字符流 字符输入流 字符输出流 RandomAccessFile 总结 从接收输入值说起 在日常的开发应用中,有时候需要直接接收外部设备如键盘等的输入值,而对于这种数据的接收方式,我们一般有三种方法:字节流读取,字符流读取,Scanner 工具类读取. 字节流读取 直接看一个例子: public class Demo01SystemIn { pub

  • 带你快速搞定java IO

    目录 一.IO底层是怎么回事? 二.梳理类的结构 三.IO类大点兵 四.来波实例展示 1.访问操作文件(FileInputStream/FileReader ,FileOutputStream/FileWriter) 2.缓存流的使用(BufferedInputStream/BufferedOutputStream,BufferedReader/BufferedWriter) 3.获取键盘输入 总结: 一.IO底层是怎么回事? 操作系统就是管家,电脑的设备就是资源,如果进程先要操作资源,必须要进

  • Java IO流深入理解

    目录 阻塞(Block)和非阻塞(Non-Block) 同步(Synchronization)和异步(Asynchronous) BIO与NIO对比 面向流与面向缓冲 阻塞与非阻塞 选择器的问世 Java NIO三件套 缓冲区Buffer Buffer的基本的原理 缓冲区分配 选择器Selector 通道Channel 使用NIO读取数据 使用NIO写入数据 IO多路复用 总结 阻塞(Block)和非阻塞(Non-Block) 阻塞和非阻塞是进程在访问数据的时候,数据是否准备就绪的一种处理方式,

  • java.io.File的renameTo方法移动文件失败的解决方案

    今天线上发现一个问题,发现一个定时移动文件的业务没有正常执行,结合日志和代码发现,移动文件是使用File类的renameTo方法,但是方法返回的都是false,表示文件移动失败. 出现这个问题我第一反应是不是文件权限的问题,但是和运维研究后发现的确不是权限导致的.既然不是权限的问题,那就看看renameTo的实现吧,查看源码发现该方法最终是通过一个本地方法实现的,看不到咋写的. 网上查了一下renameTo这个方法,发现这个方法确实存在一些问题,就是在不同的文件系统中移动是不会成功的.因为测试环

  • java中的session对象及其常用方法小结

    session对象用于在会话范围内,记录每个客户端的访问状态,以便于跟踪每个客户端的操作状态,在会话存储的信息,在浏览器发出后续请求时可以获取这些会话的有效数据. 在jsp页面中可以直接使用session对象(jsp的内置对象),也可以通过pageContext.getSession()或者request.getSession重新回去session对象. session可以保存用户的信息和实现购物车等功能. HTTP协议是一种无状态协议,客户向服务器发出的请求request,然后服务器返回响应r

  • Java JDK8新增Optional工具类讲解

    Optional 空指针异Optional常是导致Java应用程序失败的最常见原因.以前,为了解决空指针异常,Google公司著名的Guava项目引入了Optional类,Guava通过使用检查空值的方式来防止代码污染,它鼓励程序员写更干净的代码.受到Google Guava的启发,Optional类已经成为Java 8类库的一部分.Optional实际上是个容器:它可以保存类型T的值,或者仅仅保存null.Optional提供很多有用的方法,这样我们就不用显式进行空值检测. 1. 以前对nul

  • Java之IO流面试题案例讲解

    一.Java中IO流分为几种? 按照流的流向分,可以分为输入流和输出流: 按照操作单元分,可以分为字节流和字符流(字节流可以读写任何单位的数据,字符流只可以读写txt数据): 按照流的角色分,可以分为节点流和处理流: 二.IO中flush()和close()的区别 close()方法具备刷新功能,在关闭流之前就会先刷新缓冲区,将缓冲区的字节全部刷新到文件上,在关闭流.(close()方法包含一次flush()方法) flush()方法可以刷新,并且刷新之后可以继续写,而close()方法刷新之后

  • java使用IO流对数组排序实例讲解

    在学会了java中io流的使用后,我们对于数组的排序,又多了一种使用方法.大家知道流处理数据的效率是比较理想的,那么在具体操作数组排序上,很多人对于排序的方法还没有明确.下面我们先java使用流对数组排序的思路为大家进行梳理,然后带来对应的实例代码方法. 1.排序思路 (1)从字符输入流中读取文本,缓冲各个字符,从而实现字符.数组和行的高效读取 (2)询问用户需要多少位数的数组 (3)转换为数字类型 (4)将用户输入数字存入数组 (5)把数组按排序需求并打印出来 2.实例 public stat

  • Java之Jackson的基本使用案例讲解

    Jackson 是当前用的比较广泛的,用来序列化和反序列化 json 的 Java 的开源框架.Jackson 社 区相对比较活跃,更新速度也比较快, 从 Github 中的统计来看,Jackson 是最流行的 json 解析器之一 . Spring MVC 的默认 json 解析器便是 Jackson. Jackson 优点很多. Jackson 所依赖的 jar 包较少 ,简单易用.与其他 Java 的 json 的框架 Gson 等相比, Jackson 解析大的 json 文件速度比较快

  • Java中IO流概述

    目录 1.InputStream 和 OutputStream 继承结构图: 2.Reader 和 Writer 继承结构图: 3. 内容 4.面试题 1.字节流和字符流的区别? 2.什么是 IO 流? 3.有哪些可用的 Filter 流? 4.Java 中有几种类型的流? 5.如何实现对象克隆? 6.什么是缓冲区?有什么作用? 总结 1.InputStream 和 OutputStream 继承结构图: 2.Reader 和 Writer 继承结构图: 3. 内容 3.1 Java 流概述文件

  • Java中IO流文件读取、写入和复制的实例

    //构造文件File类 File f=new File(fileName); //判断是否为目录 f.isDirectory(); //获取目录下的文件名 String[] fileName=f.list(); //获取目录下的文件 File[] files=f.listFiles(); 1.Java怎么读取文件 package com.yyb.file; import java.io.File; import java.io.FileInputStream; import java.io.In

  • Java 使用IO流实现大文件的分割与合并实例详解

    Java 使用IO流实现大文件的分割与合并 文件分割应该算一个比较实用的功能,举例子说明吧比如说:你有一个3G的文件要从一台电脑Copy到另一台电脑, 但是你的存储设备(比如SD卡)只有1G ,这个时候就可以把这个文件切割成3个1G的文件 ,分开复制, 最后把三个文件合并, 这样就解决问题了 :再比如说, 你有一个上百M的文件要上传到FTP ,但是这个FTP限制你单个文件不能超过10M 这时候也可以用文件分割的办法解决问题.既然分割了,那么在我们再次使用的时候就需要合并了,今天我们就通过Java

  • Java中IO流 字节流实例详解

    Java中IO流 字节流实例详解 IO流(输入流.输出流),又分为字节流.字符流. 流是磁盘或其它外围设备中存储的数据的源点或终点. 输入流:程序从输入流读取数据源.数据源包括外界(键盘.文件.网络-),即是将数据源读入到程序的通信通道. 输出流:程序向输出流写入数据.将程序中的数据输出到外界(显示器.打印机.文件.网络-)的通信通道. 字节流 1.InputStream.OutputStream InputStream抽象了应用程序读取数据的方式 OutputStream抽象了应用程序写出数据

  • Java关于IO流的全面介绍

    JDK提供的流继承了四大类:InputStream(字节输入流).OutputStream(字节输出流).Reader(字符输入流).Writer(字符输出流). 字符流和字节流的主要区别: 1.字节流读取的时候,读到一个字节就返回一个字节: 字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,在UTF-8码表中是3个字节)时.先去查指定的编码表,将查到的字符返回. 2.字节流可以处理所有类型数据,如:图片,MP3,AVI视频文件,而字符流只能处理字符数据. 只要是处理纯文本数据,就要

  • Java中IO流 RandomAccessFile类实例详解

    Java中IO流 RandomAccessFile类实例详解 RandomAccessFile java提供的对文件内容的访问,既可以读文件,也可以写文件. 支持随机访问文件,可以访问文件的任意位置. java文件模型,在硬盘上的文件是byte byte byte存储的,是数据的集合 打开文件,有两种模式,"rw"读写."r"只读:RandomAccessFile raf = new RandomAccessFile(file, "rw");,文

  • Java基于IO流读取文件的方法

    本文实例讲述了Java基于IO流读取文件的方法.分享给大家供大家参考,具体如下: public static void readFile(){ String pathString = TEST.class.getResource("/simu").getFile(); try { pathString = URLDecoder.decode(pathString, "utf-8"); } catch (UnsupportedEncodingException e1)

随机推荐