java基础javaio详解(代码片段)

Kant101 Kant101     2023-03-21     467

关键词:

1. 概述

IO
计算机系统的IO即通过数据流、序列化和文件系统提供系统输入和输出。


流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或者是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样。

Java把这些不同来源和目标的数据都统一抽象为数据流。

分类
按流向分:
1)输入流:程序可以从中读取数据的流;
2)输出流:程序能向其中写入数据的流

按数据传输单位分:
1)字节流:以字节为单位传输数据的流;
2)字符流:以字符为单位传输数据的流;

按功能分:
1)节点流:用于直接操作目标设备的流;
2)过滤流:是对一个已存在的流的链接和封装,通过对数据进行处理为程序提供功能强大、灵活的读写功能。


2. Linux同步IO

2.1 阻塞IO

在阻塞式IO模式下,当系统调用read后,如果此时内存数据未准备好,用户线程会被阻塞,等数据准备好,并从内核缓存区将数据拷贝至用户空间后,read指令才会返回。


2.2 非阻塞IO

非阻塞IO发出read请求后,发现数据没有准备好,会继续往下执行,此时应用程序会不断轮询polling内核询问数据是否准备好,当数据没有准备好时,内核立即返回EWOULDBLOCK错误。直到数据被拷贝到应用程序缓冲区,read
请求才获取到结果。

这种方式虽然较阻塞式有了性能的提升,但依旧会对性能造成影响,因为这过程是需要应用程序不断对内核进行轮询操作的。


2.3 IO多路复用

IO多路复用就解决了非阻塞式IO的缺点,即它不会对内存进行轮询操作,当内核数据准备完毕,以事件通知机制告知应用进程已经准备好了,在此之前,应用进程可以忙其他的工作,从而减少对性能的影响。

通过多路IO复用,能使得一个进程同时处理多路IO,提升服务器吞吐量。

1) select

select函数

int select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset, const struct timeval *timeout);

select() 的机制中提供一种 fd_set 的数据结构,实际上是一个long类型的数组,当调用select()时,由内核根据IO状态修改fd_set的内容,由此来通知执行了select()的进程哪一Socket或文件可读。

使用select以后最大的优势是用户可以在一个线程内同时处理多个socket的IO请求。用户可以注册多个socket,然后不断地调用select读取被激活的socket,即可达到在同一个线程内同时处理多个IO请求的目的。

缺点
1)select 只能监控1024个连接;
2)


3. Linux异步IO


4. Java IO


5. 参考文献

java基础javaio详解(代码片段)

1.概述IO计算机系统的IO即通过数据流、序列化和文件系统提供系统输入和输出。流流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或者是... 查看详情

javaio流(详解)(代码片段)

1.File1.创建2.操作1.获取文件信息2.目录创建/删除2.IO流1.FileInputStream1.简单使用2.读取中文2.FileOutputStream1.简单使用2.追加写入3.文件拷贝4.FileReader1.简单使用2.提高读取速度5.FileWriter1.简单使用6.节点流和处理流简介7.BufferedReader1.简单... 查看详情

javaio流详解(代码片段)

流的概念和作用学习JavaIO,不得不提到的就是JavaIO流。流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,... 查看详情

javaio流(代码片段)

...图。1.1JavaIo流的概念  java的io是实现输入和输出的基础,可以方便的实现数据的输入和输出操作。在java中把不同的输入/输出源(键盘,文件,网络连接等)抽象表述为“流”(stream)。通过流的形式允许java程序使用... 查看详情

javaio知识体系详解(代码片段)

...试中遇到的奇葩问法目录一、Java IO框架之知识体系二、JavaIO分类(传输,操作)1、IO理解分类-从传输方式上2、IO理解分类-从数据操作上三、JavaIO-常见类的使用1、File相关2、字节流相关3、实现逐行输出文本文件的内... 查看详情

javaio详解(一)------file类(代码片段)

File类:文件和目录路径名的抽象表示。注意:File类只能操作文件的属性,文件的内容是不能操作的。 1、File类的字段   我们知道,各个平台之间的路径分隔符是不一样的。  ①、对于UNIX平台,绝对路径名的前缀始... 查看详情

javaio学习笔记四:socket基础(代码片段)

作者:Grey原文地址:JavaIO学习笔记四:Socket基础准备两个Linux实例(安装好jdk1.8),我准备的两个实例的ip地址分别为:io1实例:192.168.205.138io2实例:192.168.205.149安装必要工具:yuminstall-ystracelsofpmaptcpdump准备服务端代码importjava.io.*;i... 查看详情

javaio流详解——file类(代码片段)

    在上一章博客中简单的介绍了JavaIO流的一些特征。也就是对文件的输入输出,既然至始至终都离不开文件,所以JavaIO流的使用得从File这个类讲起。    File类的描述:File类是文件和目录路径名的抽... 查看详情

java核心组件io流表层篇(代码片段)

...大家说明一下,本篇篇幅较长,涵盖整个JavaIO流基础,前小半节是在讲解File类,为后续的JavaIO打下基础,后续的所有篇幅都是在讲解JavaIO流。这是初始篇章,其实我更多的是在想如何能将File类的底层 查看详情

java基础——异常详解(代码片段)

阅读目录一、异常简介二、try-catch-finally语句三、throw和throws关键字四、java中的异常链五、结束语JAVA异常与异常处理详解回到顶部一、异常简介什么是异常?异常就是有异于常态,和正常情况不一样,有错误出错。在java中,阻... 查看详情

java基础之--注解annotation详解(代码片段)

自定义注解入门:public@interfaceAnnotation01//setdefaultvalue"";Stringvalue()default"";1.保持策略@Retentionannotation:告知编译器如何去运行,defaultisRetentionPolicy.CLASS  (1).RetentionPolicy.CLASS:--》会将注解保存在class文件中,但运行时 查看详情

java之io知识详解(代码片段)

...作文件属性文件列表流文件监视常见类使用本文主要介绍JavaIO常见类的使用,包括:磁盘操作,字节操作,字符操作,对象操作和网络操作。IO常见类的使用 查看详情

java基础之详解java反射机制(代码片段)

...制???反射(Reflection)是Java的高级特性之一,是框架实现的基础,定义:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态... 查看详情

javaio流-字节输入流与字符输入流(代码片段)

IO流详解一、输入流字节输入流FileInputSteam1、构造方法:publicFileInputStream(Filefile)publicFileInputStream(FileDescriptorfdObj)publicFileInputStream(Stringname)2、read方法://每次读取一个字节publicintread()//读取b.length个字节到 查看详情

java基础:泛型详解(代码片段)

泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。什么是泛型?为什么要使用泛型?泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参... 查看详情

java基础总结之thymeleaf详解(代码片段)

一、Thymeleaf语法1.1变量表达式$…1.2选择变量表达式*…1.3消息表达式#…1.4链接表达式@…1.5片段表达式~…二、基本使用2.1Thymeleaf模板基本配置一、Thymeleaf语法标签在HTML页面上使用Thymeleaf标签,Thymeleaf标签能够动态地替换掉... 查看详情

java基础黑马程序员教材案例2.32.6代码详解(代码片段)

一、2.3超市购物程序importjava.util.Scanner;publicclasstest2_3//超市购物程序staticdoublecash=0.0;publicstaticdoublebuy()System.out.println("你要买什么?输入id");Scannerscanner=newScanner(System.in); 查看详情

java基础语法学习day01---初学者必看详解(代码片段)

java基础语法学习day01---初学者必看详解1.初识java1)什么是java1.1)计算机语言1.2)高级的1.3)编程2)编写第一个java程序2.1)创建java项目2.2)创建package包2.3)创建Class类2.4)编写程序并运行3)调整字体3.1)菜单栏选中3.2)左上角搜索font3.3)右侧展... 查看详情