IO总结

同步IO和异步IO 阅读详情

两个对应指:1.字节流(Byte Stream)和字符流(Char Stream)的对应;2.输入和输出的对应。一个桥梁指:从字节流到字符流的桥梁。对应于输入和输出为InputStreamReader和OutputStreamWriter。
在这里插入图片描述
输入字节流 InputStream

InputStream 是所有的输入字节流的父类,它是一个抽象类。
ByteArrayInputStream、StringBufferInputStream、FileInputStream 是三种基本的介质流,它们分别从Byte 数组、StringBuffer、和本地文件中读取数据。
输出字节流 OutputStream
OutputStream 是所有的输出字节流的父类,它是一个抽象类。
ByteArrayOutputStream、FileOutputStream 是两种基本的介质流,它们分别向Byte 数组、和本地文件中写入数据。
常用的处理流

缓冲流:BufferedInputStrean 、BufferedOutputStream、 BufferedReader、 BufferedWriter 增加缓冲功能,避免频繁读写硬盘。
转换流:InputStreamReader 、OutputStreamReader实现字节流和字符流之间的转换。
数据流: DataInputStream 、DataOutputStream 等-提供将基础数据类型写入到文件中,或者读取出来。

常用实战

第一 读取数据

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class A1 {

public static void main(String[] args) {
    A1 a1 = new A1();

    //电脑d盘中的abc.txt 文档
    String filePath = "D:/abc.txt" ;
    String reslut = a1.readFile( filePath ) ;
    System.out.println( reslut ); 
}


/**
 * 读取指定文件的内容
 * @param filePath : 文件的路径
 * @return  返回的结果
 */
public String readFile( String filePath ){
    FileInputStream fis=null;
    String result = "" ;
    try {
        // 根据path路径实例化一个输入流的对象
        fis  = new FileInputStream( filePath );

        //2. 返回这个输入流中可以被读的剩下的bytes字节的估计值;
        int size =  fis.available() ;
        //3. 根据输入流中的字节数创建byte数组;
        byte[] array = new byte[size];
        //4.把数据读取到数组中;
        fis.read( array ) ; 

        //5.根据获取到的Byte数组新建一个字符串,然后输出;
        result = new String(array); 

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }catch (IOException e) {
        e.printStackTrace();
    }finally{
        if ( fis != null) {
            try {
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    return result ;
}


}

第二 写入数据

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class A2 {

public static void main(String[] args) {
    A2 a2 = new A2();

    //电脑d盘中的abc.txt 文档
    String filePath = "D:/abc.txt" ;

    //要写入的内容
    String content = "今天是2017/1/9,天气很好" ;
    a2.writeFile( filePath , content  ) ;

}

/**
 * 根据文件路径创建输出流
 * @param filePath : 文件的路径
 * @param content : 需要写入的内容
 */
public void writeFile( String filePath , String content ){
    FileOutputStream fos = null ;
    try {
        //1、根据文件路径创建输出流
        fos  = new FileOutputStream( filePath );

        //2、把string转换为byte数组;
        byte[] array = content.getBytes() ;
        //3、把byte数组输出;
        fos.write( array );

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }catch (IOException e) {
        e.printStackTrace();
    }finally{
        if ( fos != null) {
            try {
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}


}

实现文件的复制

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class A3 {

public static void main(String[] args) {
    A3 a2 = new A3();

    //电脑d盘中的cat.png 图片的路径
    String filePath1 = "D:/cat.png" ;

    //电脑e盘中的cat.png 图片的路径
    String filePath2 = "E:/cat.png" ;

    //复制文件
    a2.copyFile( filePath1 , filePath2 );

}

/**
 * 文件复制 
 * @param filePath_old : 需要复制文件的路径
 * @param filePath_new : 复制文件存放的路径
 */
public void copyFile( String filePath_old  , String filePath_new){
    FileInputStream fis=null ;
    FileOutputStream fout = null ;
    try {
        // 根据path路径实例化一个输入流的对象
        fis  = new FileInputStream( filePath_old );

        //2. 返回这个输入流中可以被读的剩下的bytes字节的估计值;
        int size =  fis.available() ;
        //3. 根据输入流中的字节数创建byte数组;
        byte[] array = new byte[size];
        //4.把数据读取到数组中;
        fis.read( array ) ; 

        //5、根据文件路径创建输出流
        fout = new FileOutputStream( filePath_new ) ;
        
        //5、把byte数组输出;
        fout.write( array );

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }catch (IOException e) {
        e.printStackTrace();
    }finally{
        if ( fis != null) {
            try {
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if ( fout != null ) {
            try {
                fout.close();
            } catch (IOException e) {
                e.printStackTrace();
            }   
        }
    }
}
}

读取某个目录下所有文件、文件夹

public static ArrayList<String> getFiles(String path) {
    ArrayList<String> files = new ArrayList<String>();
    File file = new File(path);
    File[] tempList = file.listFiles();

    for (int i = 0; i < tempList.length; i++) {
        if (tempList[i].isFile()) {
//              System.out.println("文     件:" + tempList[i]);
            files.add(tempList[i].toString());
        }
        if (tempList[i].isDirectory()) {
//              System.out.println("文件夹:" + tempList[i]);
        }
    }
    return files;
}

递归读取全部文件

import java.io.File;
import java.util.ArrayList;
import java.util.List;



public class ReadFile {
	private static void test(String fileDir) {
		List<File> fileList = new ArrayList<File>();
		File file = new File(fileDir);
		File[] files = file.listFiles();// 获取目录下的所有文件或文件夹
		if (files == null) {// 如果目录为空,直接退出
			return;
		}
		// 遍历,目录下的所有文件
		for (File f : files) {
			if (f.isFile()) {
				fileList.add(f);
			} else if (f.isDirectory()) {
				System.out.println(f.getAbsolutePath());
				test(f.getAbsolutePath());
			}
		}
		for (File f1 : fileList) {
			System.out.println(f1.getName());
		}
	}
 
	public static void main(String[] args) {
		test("F:/apache-tomcat-7.0.57-windows-x64");
	}
}
r语言svr模型_R语言初探强化学习中的马尔可夫模型 强化学习大家这几年应该不陌生,从AlphaGo到AlphaZero让大家见识到了强化学习的力量。我们今天给大家介绍一个在强化学习中核心思维马尔可夫决策过程(MDP)。马尔科夫决策过程是基于马尔科夫论的随机动态系统的最优决策过程。它是马尔科夫过程与确定性的动态规划相结合的产物,故又称马尔科夫型随机动态规划,属于运筹学中数学规划的一个分支。今天我们给大家介绍下马尔可夫决策过程中用到一些算法以... 阅读详情

相关推荐

python数据处理与分析案例,python如何进行数据处理

大家好,本文将围绕基于python的数据处理案例展开说明,python数据处理与分析案例是一个很多人都想弄明白的事情,想搞清楚python如何进行数据处理需要先了解以下几个事情。大家好,小编来为大家解答以下问题,python数据处理案例步骤及其代码,python数据处理与分析教程,今天让我们一起来看看吧!哈喽~今天学习记录的是数据分析实训小案例。就用这个案例来好好巩固一下 python 数据分析三剑客。

a17348的博客 1238

5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO

5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO 看了一些文章,发现有很多不同的理解,可能是因为大家入切的角度、环境不一样。所以,我们先说明基本的IO操作及环境。本文是在《UNIX网络编程 卷1:套接字联网API》6.2节"I/O 模型 "的基础上,即UNIX/LINUX环境下的网络 IO环境下的理解,它里面给出的例子是读取(接收)网络UDP数据。下面简单写写自己对这些IO...

tjiyu的博客 3万+

手搓ZLMediaKit实现拉流推流系列3(RK3588上YOLO系列拉流、MPP解码+编码、推流全流程)

 前段时间比较忙,一直没有时间补充后续的内容。今天终于抽出空来,立马进入码字环节:手搓ZLMediaKit实现拉流推流系列在本篇也终于迎来了完结篇,在本篇文章中,你将看到以下一整套完整流程:使用ZLMediaKit拉流---MPP解码---Yolo模型进行推理---MPP编码并推流。

m0_46303486的博客 2174

浅谈5种IO模型——阻塞式IO、非阻塞式IO、信号驱动IO、多路复用IO及异步IO

5种IO模型5种IO模型1、背景2、IO模型2.1、阻塞式IO(blocking IO)2.2、非阻塞式IO(nonblocking IO)2.3、多路复用IO(IO multiplexing)2.4、信号驱动IO(signal driven IO)2.5、异步IO( asynchronous IO)参考 5种IO模型 1、背景 从TCP发送数据的流程说起 要深入的理解各种IO模型,那么必须先了解下产生各种IO的原因是什么,要知道这其中的本质问题那么我们就必须要知一条消息是如何从过一个人发送到另外一个人的;

JMW1407的博客 8309

从CLIP到AnomalyCLIP:零样本异常检测的跨领域进化之路

本文探讨了从CLIP到AnomalyCLIP的技术演进,重点介绍了零样本异常检测在跨领域应用中的突破。AnomalyCLIP通过对象无关提示学习和多尺度特征提取,显著提升了工业质检、医疗影像等领域的检测精度,实现了高达96.4%的金属螺母划痕检测精度和85.7%的皮肤癌敏感度。这一技术为多模态模型在异常检测中的应用开辟了新路径。

r2s3t4的博客 111

从零构建NVENC编码器:一个游戏开发者的实战手册

本文详细介绍了如何从零构建NVENC编码器,特别针对游戏开发者提供实战指南。内容涵盖NVENC基础概念、DirectX纹理捕获、异步编码优化及高级特性配置,帮助开发者高效集成硬件编码技术到游戏引擎中,实现高性能游戏录制和直播功能。重点解析了NVIDIA专用编码芯片的优势与API使用技巧。

weixin_29292431的博客 365

【IO】什么是IO、标准IO、文件IO

IO是计算机中的输入/输出(Input/Output)的简称,指的是之间进行数据交换的过程。输入是指将外部数据传输到计算机系统中,输出是指将计算机系统中的数据传输到外部设备中。在计算机中,输入可以来自多种来源,如键盘、鼠标、触摸屏、传感器等。输出可以发送到显示器、打印机、扬声器、存储设备等。IO操作是计算机系统中的重要组成部分,它使计算机能够与用户交互,接收用户的输入,并将计算结果输出给用户。通过IO操作,计算机可以读取外部数据、存储数据、显示信息、传输数据等。

m0_56844552的博客 5665

Mplus—交叉滞后面板模型(Cross-Lagged Panel Model, CLPM)

本文介绍交叉滞后模型相关知识,以及显变量模型与潜变量模型在Mplus中的语法。

m0_54401011的博客 1万+

同步IO、异步IO以及五种网络IO模式

当用户进程调用了select,那么整个进程就会被block,而同时,kernel会 “监视”所有select负责的socket,当任何一个socket中的数据准备好了,select就会返回。很显然,这种IO模型是同步的。有一天,学校里面优化了热水的供应,增加了很多水龙头,这个时候小明同学再去装水,舍管阿姨告诉他这些水龙头都还没有水,你可以去忙别的了,等有水了告诉他。: 小明去打开水,而开水塔此时没有水,开水塔的阿姨叫小明把水壶放到现场,来水后会帮他打好水,并打电话叫他来取,这是异步IO的一种案例。

m0_65635427的博客 2573

高频电磁场仿真-主题064-伴随变量法与灵敏度分析

在电磁器件优化设计中,梯度信息对于指导优化方向至关重要。考虑一个典型的电磁优化问题: 其中 p=[p1,p2,...,pn]Tp = [p_1, p_2, ..., p_n]^Tp=[p1​,p2​,...,pn​]T 是设计参数向量(如几何尺寸、材料参数等)。传统有限差分法的困境:示例: 一个具有100个设计参数的天线优化问题伴随变量法(Adjoint Variable Method, AVM)通过引入伴随场,将梯度计算复杂度从 O(n)O(n)O(n) 降低到 O(1)O(1)O(1):伴随变量法在计算

kkchenjj的博客 411

工商银行软件开发中心数据安全监测溯源防护体系建设成果及展望

结合业界先进溯源理念和我行管理要求,依托大数据、分布式搜索分析引擎等技术,构建PB级海量数据加工分析和小时级快速核验、检索、溯源手段(如图6所示),支撑6种客户敏感信息关键要素的单一或组合溯源,形成行之有效的数据安全溯源流程,配套落地自动化快速泄露样本真实性核验和灵活高效的溯源能力,通过数据相关属性的自动化分析,实现追踪泄露源头、明确泄露路径的目标,为有效应对数据安全事件,降低和消除风险与不良影响,开展事后追责处置工作提供体系化解决方案。提高数据排查的自动化程度和排查效率,降低人工成本。

银行信息系统应用架构详解 225

【网络】高级IO——五种IO模式

我们在本专栏前面的文章中大概学习了TCP/IP四层模型,因为我们不学网络,所以那些知识也是够用的。我们接下来要回归到我们的应用层的学习——也就是写代码。接下来,我们在接下来的学习中将学习以下内容理解五种IO模型的基本概念,重点是IO多路转接掌握select编程模型,能够实现select版本的TCP服务器掌握poll编程模型,能够实现poll版本的TCP服务器掌握epoll编程模型,能够实现epoll版本的TCP服务器理解epoll的LT模式和ET模式,

2301_80224556的博客 3578

AI赋能数字人:打造与语音节奏完美匹配的高质量手势动画

想象一个场景:当你与一位数字人交谈时,它不仅能理解你的言语,还能恰到好处地挥动手臂、比划手势,就像真实的人类交流一样自然流畅。这正是当前AI技术致力于实现的目标——通过分析语音内容,自动生成与之相匹配的手势动作,为数字人赋予更加丰富的情感表达和非言语沟通能力。AI手势生成技术的出现,标志着数字人在模仿人类自然交流方式上迈出了重要一步。随着技术的不断成熟与应用场景的拓宽,未来我们可以期待更多富有表现力和情感互动的数字人出现在我们的日常生活中,开启人机交互的新篇章。

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 793

阻塞IO、非阻塞IO的区别

1.类与类之间的关系:依赖,实现,泛化(继承),关联,组合,聚合。 1)依赖(虚线):一个类是 另一个类的函数参数 或者 函数返回值。 2)实现(实线加小圆):对纯虚函数类(抽象类)的实现。 3)继承 即 泛化(实线加空心三角形,从子类指向父类):表示一个类与另一个类之间的继承关系; 4)关联(实线):一个类是另一个类的成员变量。 5)聚合(菱形加实线):整体和部分的关系。不太紧密的(如:汽车与发

yyxyong的博客 3万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

五种 IO 模型与非阻塞 IO

本文介绍了五种IO模型及其核心概念,阐述了不同IO模型的特点与应用场景。

Edison's 小宇宙 4万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Linux 【C编程】IO进阶— 阻塞IO、非阻塞IO、 多路复用IO、 异步IO

本文主要讲了Linux的高级IO操作,阻塞IO与非阻塞IO,多路IO复用与异步IO

weixin_46999174的博客 1870

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

五种 IO 模型 (异步IO同步IO)

任何 IO 过程中, 都包含两个步骤. 第一是等待, 第二是拷贝.IO=等待+拷贝而且在实际的应用场景中, 等待消耗的时间往往都远远高于拷贝的时间. 让 IO 更高效, 最核心的办法就是让等待的时间尽量少.即单位时间内,IO等待时间的比重越低效率越高。I/O 模型等待方式等待时间长短CPU 利用率适用场景阻塞 I/O(Blocking I/O)等待recv()返回长(进程完全被阻塞)低(进程无法做其他任务)小规模应用非阻塞 I/O(Non-blocking I/O)recv()轮询数据中。

wws7920的博客 918

阻塞IO与非阻塞IO

学习地址:https://www.cnblogs.com/xiaoxi/p/6525396.html 在《Unix网络编程》一书中提到了五种IO模型,分别是:阻塞IO、非阻塞IO、多路复用IO、信号驱动IO以及异步IO。 1、阻塞IO模型   最传统的一种IO模型,即在读写数据过程中会发生阻塞现象。   当用户线程发出IO请求之后,内核会去查看数据是否就绪,如果没有就绪就会等待数据就绪,而用...

qq_34638435的博客 4万+

五种IO模型和阻塞IO

五种IO模型和阻塞IO

Xpccccc的博客 1255

同步IO、异步IO、阻塞IO、非阻塞IO、复用IO

同步IO与异步IO的区别? 1.POSIX 2.IO模型 阻塞IO模型 非阻塞IO模型 IO复用模型 信号驱动IO模型 异步IO模型 五种IO模型比较

zhuguanlin121的博客 883

Linux 五种IO模型总篇(阻塞IO、非阻塞IO、信号驱动IO、多路复用IO(select、poll、epoll)、异步IO)

IO(Input Output)简单来说就是和,当底层数据没有就绪时,等待数据就绪,当数据就绪时就拷贝数据到上层。对于怎么等和拷贝的问题,衍生出了五种IO模型,。前四种IO是,多路复用/多路转接IO是异步IO。信号IO是同步还是异步,具有一定争议。但普遍认为,所以信号IO也是同步IO。IO的同步、异步的概念与线程不同,这里的指的是指的是。。对于来说,它的高效体现在IO,其他的IO模型高效在。每一种IO,都有其对应的使用场景,没有说哪一种IO模型在任何情况下都完胜另一种IO模型。

laimaxgg 1539

五种IO模型与阻塞IO

五种IO模型与阻塞IO

zgwnb666的博客 1576

高级IO——五种IO模型

大致介绍了五种IO模型

weixin_74074953的博客 1303

磁盘IO和网络IO

4、IO访问方式 4.1 磁盘IO 具体步骤: 当应用程序调用read接口时,操作系统检查内核缓冲区中是否存在需要的数据,如果存在,就直接从内核缓存中直接返回,否则从磁盘中读取,然后缓存至操作系统的缓存中。 当应用程序调用write接口时,将数据直接从用户地址空间复制到内核地址空间的缓存中,这时对用户程序来说,写操作已经完成了,至于什么时候写入磁盘中,...

泷泷养的乔小胖 5398

【IO】IO模型:Linux下的五种IO模型

Linux 提供了五种 IO 模型,包括:阻塞IO、非阻塞IO、IO多路复用、信号驱动IO、异步IO。 在unix操作系统中,一个IO操作主要经过两个阶段:1、等待数据准备;2、将数据从内核空间拷贝到用户进程中。示意图如下: 1.阻塞 IO 模型 Linux操作系统中,这就是一种最简单的IO模型,即阻塞IO。一般表现为进程或线程等待某个条件,如果条件不满足,则一直等下去。条件满足,则进行下一步操作。 当用户线程发出 IO 请求之后,内核会去查看数据是否就绪,如果没有就绪就会等待数据就绪,而用户线程就会处于

A minor 1954

五种IO模型- 阻塞IO、非阻塞IO、多路复用IO、信号驱动IO以及异步IO

在操作系统中处理输入/输出(IO)操作的过程中,存在多种方式,包括阻塞IO、非阻塞IO、多路复用IO、信号驱动IO以及异步IO。这些方式在操作系统实现和应用程序编写时有着不同的适用场景和性能特征。接下来,我将逐一介绍它们的实现原理、优缺点以及应用场景,同时给出Java和Python的实验示例。

AI大模型/Python/Java/MySQL技术栈,快来和我一起学习吧 ~ 1307
上一篇: 虚拟机知识点
下一篇: Java集合
exit_back
博客等级 码龄8年 2粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值