首页 > 编程语言 >java基础知识合集-io

java基础知识合集-io

时间:2023-04-09 11:33:20浏览次数:43  
标签:字符 java io 内存 IO 缓冲区 合集 字节

1.IO简介

2.IO分类

2.1.流分类

按照流的流向分,可以分为输入流和输出流

按照操作单元划分,可以划分为字节流和字符流

按照流的角色划分为节点流和处理流

Java lO流共涉及40多个类,这些类看上去很杂乱,但实际上很有规则,而且彼此之间存在紧密的联系,Java lO流的40多个类都是从如下4个抽象类基类中派生出来的

InputStream/Reader:所有的输入流的基类,前者是字节输入流,后者是字符输入流,OutputStream/Writer:所有输出流的基类,前者是字节输出流,后者是字符输出流

 

2.2.字节流和字符流

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

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

不管是文件读写还是网络发送接收,信息的最小存储单元都是字节,那为什么IO流操作要分为字节流操作和字符流操作呢?

字符流是由Java虚拟机将字节转换得到的,问题就出在这个过程还算是非常耗时,并且如果我们不知道编码类型就很容易出现乱码问题。所以IO流就干脆提供了一个直接操作字符的接口,方便我们平时对字符进行流操作。如果音频文件、图片等媒体文件用字节流比较好,如果涉及到字符的话使用字符流比较好

2.3.IO模型分类

UNIX系统下,IO模型一共有3种:同步阻塞I/O、同步非阻塞I/O、异步I/O

在java模式下,分为BIO,NIO,AIO

2.3.1.BIO(Blocking l/O)

BIO属于同步阻塞IО模型

2.3.2.NIO(Non-blocking/New I/O)

NIO是一种同步非阻塞的IO模型,对应java.nio包,提供了Channel,Selector,Buffer等抽象,NIO中的N可以理解为Non-blocking,它支持面向缓冲的,基于通道的IO操作方法,对于高负载、高并发的网络应用,应使用NIO的非阻塞模式来开发,NIO分为直接缓冲区和非直接缓冲区

非直接缓冲区通过拷贝

读取:当Java应用程序读取文件时,磁盘文件数据先读取到内核地址空间对应的物理内存缓冲区,再拷贝到用户地址空间对应的物理内存缓冲区,然后才能被应用程序读取

写入:也是一样的

优点是安全,缺点是速度慢,因为需要多一次拷贝

直接缓冲区是通过物理内存映射文件直接传递

在内核地址空间的物理内存划分了一块缓冲区,操作系统直接把数据读到这个缓冲区,然后jvm也可以直接读写这个区域,这部分不属于jvm内存,属于操作系统内存

特点:①可以减少了一次数据拷贝,但是用户态与内核态的切换次数没有减少

②不安全,因为我们只是把数据写入了物理内存,具体什么时候写入磁盘文件不是由java程序控制的

③直接内存不受jvm垃圾回收的影响,java中的DirectByteBuf对象仅维护了此内存的虚引用,内存回收分成两步:DirectByteBuf对象被垃圾回收,将虚引用加入引用队列;通过专门线程访问引用队列,根据虚引用释放堆外内存

 

2.3.3.AIO(Asynchronous I/O)

AIO也就是NIO2,它是异步非阻塞的IO模型

2.4.IO设计模式

https://javaguide.cn/java/io/io-design-patterns.html#%E8%A7%82%E5%AF%9F%E8%80%85%E6%A8%A1%E5%BC%8F

标签:字符,java,io,内存,IO,缓冲区,合集,字节
From: https://www.cnblogs.com/zz-coding/p/17300054.html

相关文章

  • VisionMobile:虚拟助手(VA)- Siri背后的前沿UI技术(五)
    五、VA价值链中的领军者和挑战者创建虚拟助手是项复杂的工作,在一定程度上整合供应链上各个模块,需要从技术厂商、搜索引擎、网络广告,第三方服务供应商,应用商店,手机制造商那里得到许可并建立合作伙伴关系。本章节将分析虚拟助手市场的领军者和挑战者。领先的VA应用由R&D所驱动,美国公......
  • VisionMobile:虚拟助手(VA)- Siri背后的前沿UI技术(四)
    四、VA商务模式:收入分成而非应用下载付费VA商务模式尚在初期远未成熟,仅越过最初的适配裂缝进入市场。在43个VA应用中有近42%选择下载付费方式,相比之下,前十VA应用付费比例是30%。前十应用更倾向为同一应用同时提供免费和付费版本,更倾向应用内购买方式(将免费升级为付费,或者增加新......
  • VisionMobile:虚拟助手(VA)- Siri背后的前沿UI技术(二)
    二、虚拟辅手技术的演进今日技术和明天发展虚拟辅手技术建基5大技术模块:语音识别(SR),自然语言处理(NLP),用户分析,搜索和推荐,以及头像可视化。这些技术模块处于持续演化的状态,为大厂商和创业公司留下开放的创新空间。语音识别语音识别(SR),也称为自动语音识别(ASR)和语音到文字(STT),由机器将话音......
  • VisionMobile:虚拟助手(VA)- Siri背后的前沿UI技术(三)
    三、虚拟助手的竞争Siri仅是充分竞争市场冰山的尖顶。Apple的产品在去年引发一波模仿和创新,有数十个智能手机应用。在报告中将分析Siri及另外4个应用:语言识别专家Nuance公司的DragonGo,i-Free创新工场的可视化驱动Everfriends,人工智能创业公司Dexetra的iris,和AT&T实验室的Speak4b......
  • VisionMobile:虚拟助手(VA)- Siri背后的前沿UI技术(一)
    VisionMobile发布报告《BeyondSiri:ThenextfrontierinUserInterface》,分析虚拟助手技术的市场,包括关键技术和商务模式,竞争点,和跨4屏虚拟助手的演化。自苹果在2011年推出Siri技术后,声控的移动虚拟助手(VirtualassistantsVAs)应用跨过技术裂缝进入大众市场,帮助用户通过语音命......
  • Java标准类
    Java标准类标准类的定义类的代码publicclassPerson{/*标准类:1.所有成员变量都用private修饰2.每个成员变量都有一个getter,setter方法3.一个无参构造方法4.一个全参构造方法这样的标准类也叫JavaBean*/privateStringn......
  • java中操作redis
             ......
  • Java SpringBoot Bean InitializingBean
    Spring中有两种类型的Bean,一种是普通Bean,另一种是工厂Bean,即FactoryBean。工厂Bean跟普通Bean不同,其返回的对象不是指定类的一个实例,其返回的是该工厂Bean的getObject方法所返回的对象。Spring初始化bean有两种方式:实现InitializingBean接口,实现afterPropertiesSet方法。(比通过反射......
  • Java SpringBoot Test 单元测试中包括多线程时,没跑完就结束了
    如何阻止JavaSpringBootTest单元测试中包括多线程时,没跑完就结束了使用CountDownLatchCountDownLatch、CyclicBarrier使用区别多线程ThreadPoolTaskExecutor应用JavaBasePooledObjectFactory对象池化技术@SpringBootTestpublicclassPoolTest{@Testvoid......
  • 看到这个案例,突然醒悟axios的使用方法
    案例--点击按钮改变文本内容源代码:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>测试界面</title></head><body><divid="app"><p>{{message}}</p......