报错信息如题,cn.hutool.core.io.IORuntimeException:Notafile....报错位置FileReaderreader=newFileReader(path);初步分析检查下来发现,path实际对应的是一个文件夹,而不是文件。文件来源关键代码(FileUtil、FileWriter都是出自hutool工具包)FileUtil.mkdir(newFile(...));FileWriterwriter=newFileWriter(".....json");writer.write(str);结合官方文档此方法不对File对象类型做判断,如果File不存在,无法判断
报错信息如题,cn.hutool.core.io.IORuntimeException:Notafile....报错位置FileReaderreader=newFileReader(path);初步分析检查下来发现,path实际对应的是一个文件夹,而不是文件。文件来源关键代码(FileUtil、FileWriter都是出自hutool工具包)FileUtil.mkdir(newFile(...));FileWriterwriter=newFileWriter(".....json");writer.write(str);结合官方文档此方法不对File对象类型做判断,如果File不存在,无法判断
1.IO的概念IO简单来讲就是对输入输出设备的简化表达形式单片机中各种接口,进行数据流的传输从磁盘中读取数据至内存,又或者从内存中写入磁盘编程中的IO此时的IO其应用程序的运行态,即进程---》IO调用特别强调的是我们的应用程序其实并不存在实质的IO过程,真正的IO过程是操作系统的事情,这里把应用程序的IO操作分为两种动作:IO调用和IO执行。因此所有的IO操作算作IO调用,之后由内核进行执行2.Linux中的5种IO模型5种IO模型同步IO:阻塞IO模型、非阻塞IO模型、IO复用模型、信号驱动的IO模型异步IO阻塞IO模型--bio---blockIO--》fd默认是阻塞的,网络编程中acc
1.IO的概念IO简单来讲就是对输入输出设备的简化表达形式单片机中各种接口,进行数据流的传输从磁盘中读取数据至内存,又或者从内存中写入磁盘编程中的IO此时的IO其应用程序的运行态,即进程---》IO调用特别强调的是我们的应用程序其实并不存在实质的IO过程,真正的IO过程是操作系统的事情,这里把应用程序的IO操作分为两种动作:IO调用和IO执行。因此所有的IO操作算作IO调用,之后由内核进行执行2.Linux中的5种IO模型5种IO模型同步IO:阻塞IO模型、非阻塞IO模型、IO复用模型、信号驱动的IO模型异步IO阻塞IO模型--bio---blockIO--》fd默认是阻塞的,网络编程中acc
系统调用系统调用:操作系统提供给用户程序调用的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务 为什么用户程序不能直接访问系统内核提供的服务为了更好地保护内核空间,将程序的运行空间分为内核空间和用户空间(也就是常称的内核态和用户态),它们分别运行在不同的级别上在逻辑上是相互隔离的。因此用户进程在通常情况下不允许访问内核数据,也无法使用内核函数,它们只能在用户空间操作用户数据,调用用户空间的函数。进行系统调用时,程序运行空间从用户空间进入内核空间,处理完后再返回到用户空间系统调用并不是直接与程序员进行交互的,它仅仅是一个通过软中断机制向内核提交请求,以获取内核服务
系统调用系统调用:操作系统提供给用户程序调用的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务 为什么用户程序不能直接访问系统内核提供的服务为了更好地保护内核空间,将程序的运行空间分为内核空间和用户空间(也就是常称的内核态和用户态),它们分别运行在不同的级别上在逻辑上是相互隔离的。因此用户进程在通常情况下不允许访问内核数据,也无法使用内核函数,它们只能在用户空间操作用户数据,调用用户空间的函数。进行系统调用时,程序运行空间从用户空间进入内核空间,处理完后再返回到用户空间系统调用并不是直接与程序员进行交互的,它仅仅是一个通过软中断机制向内核提交请求,以获取内核服务
前言本文主要作为本人学习C\C++历程的的一种记录,以期望通过这种方式加深对知识点的记忆,查漏补缺。如有写得不对的地方,欢迎大家批评改正。模板概论模板是泛型编程的基础,是创建泛型类或函数的蓝图或公式。C++提供了两种模板机制:函数模板和类模板。函数模板,实际上是建立了一个通用函数,其函数类型和形参类型不具体制定,用一个虚拟的类型来代表。类模板和函数模板的定义和使用类似。下面开始逐一介绍C++模板的应用。函数模板定义函数模板点击查看代码template //注意:T代表泛型的数据类型,不是只能写T,voidmySwap(T&a,T&b){ Ttemp=a; a=b; b=temp;}也可以这样定
前言本文主要作为本人学习C\C++历程的的一种记录,以期望通过这种方式加深对知识点的记忆,查漏补缺。如有写得不对的地方,欢迎大家批评改正。模板概论模板是泛型编程的基础,是创建泛型类或函数的蓝图或公式。C++提供了两种模板机制:函数模板和类模板。函数模板,实际上是建立了一个通用函数,其函数类型和形参类型不具体制定,用一个虚拟的类型来代表。类模板和函数模板的定义和使用类似。下面开始逐一介绍C++模板的应用。函数模板定义函数模板点击查看代码template //注意:T代表泛型的数据类型,不是只能写T,voidmySwap(T&a,T&b){ Ttemp=a; a=b; b=temp;}也可以这样定
首发地址day02真正的高并发还得看IO多路复用项目仓库地址https://github.com/lzs123/CProxy,欢迎forkandstar!往期教程day01-从一个基础的socket服务说起本节目的使用epoll实现一个高并发的服务器从单进程讲起上节从一个基础的socket服务说起我们实现了一个基本的socket服务器,并留了个思考题先启动server,然后启动一个client,不输入数据,这个时候在另外一个终端上再启动一个client,并在第二个client终端中输入数据,会发生什么呢?实际操作后,我们会发现,在第二个client输入后,服务端并没有响应,直到第一个clien
首发地址day02真正的高并发还得看IO多路复用项目仓库地址https://github.com/lzs123/CProxy,欢迎forkandstar!往期教程day01-从一个基础的socket服务说起本节目的使用epoll实现一个高并发的服务器从单进程讲起上节从一个基础的socket服务说起我们实现了一个基本的socket服务器,并留了个思考题先启动server,然后启动一个client,不输入数据,这个时候在另外一个终端上再启动一个client,并在第二个client终端中输入数据,会发生什么呢?实际操作后,我们会发现,在第二个client输入后,服务端并没有响应,直到第一个clien