Java IO(一) 之 IO总览

前言:

IO对于系统设计来说,是一个很重要的关注点,往往系统运行的瓶颈就在IO设计上,无论是数据库IO,文件IO还是网络IO,都需要进行精致的设计,才能使得系统达到最佳运行状态。对于现代系统并发量、数据量的剧增,IO处理对于系统显得更加重要。研究Java IO对于我们工作有益无害。

Java.io包含了Java阻塞型IO的设计。Java的IO主要包含三个部分:

1.流式部分–IO的主体部分;

2.非流式部分–主要包含一些辅助流式部分的类,如:File类、RandomAccessFile类和FileDescriptor等类;

3.文件读取部分的与安全相关的类,如:SerializablePermission类。以及与本地操作系统相关的文件系统的类,如:FileSystem类和Win32FileSystem类和WinNTFileSystem类。

Java.io包中主要是字节流和字符流、输入与输出,流具有最基本的特点:流是一位的,单向的。

下面来看看java.io包中大部分类的具体类图,了解其继承关系。

字节输入流:

字节输出流:

字符输入流:

字节输出流:

由以上的类图可知,字节流和字符流大部分都是在InputStream、OutputStream、Writer、Reader接口约定实现的。

java.io系列接口和实现中,大量的使用了装饰者设计模式,这使得在不改变原有类结构的情况下,可以对类功能进行扩展,而且我们也可以创建自己的装饰者,来包装某些特定的流类。

接下来的系列中,本系列文章将从字节流开始讲起,针对每种流和每种装饰的流进行分析。文章分析重点在源码分析和应用。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-22 15:12:20

Java IO(一) 之 IO总览的相关文章

java(九)IO流

IO流: IO流是用来处理设备之间的数据传输的. java对数据的操作是通过流的方式. java用于操作流的对象都在IO包中. 流按操作的数据分为两种:字符流和字节流. 字符流的由来:字符流其实就是字节流读取文字字节数据后,不直接操作而是先查指定的编码表,  获取对应的文字.再对这个文字进行操作. 简单说,就是字符流=字节流+编码表. 字节流的抽象基类(就是顶层父类):InputStream,OutputStream 字符流的抽象基类:Reader,Writer 这些体系的子类都以父类名作为后缀

复习java基础第六天(IO)

一:File 类 • 输入:读取外部数据(磁盘.光盘等存储设备的数据)到程序(内存)中. • 输出:将程序(内存)数据输出到磁盘.光盘等存储设备中 • Java 的 IO 流主要包括输入.输出两种 IO 流,每种输入.输出流有可分为字节流和字符流两大类: – 字节流以字节为单位来处理输入.输出操作 – 字符流以字符为单位来处理输入.输出操作 注意:输入.输出是以程序为参照. • File 类代表与平台无关的文件和目录. • File  能新建.删除.重命名文件和目录,但 File 不能访问文件内

Java aio(异步网络IO)初探

按照<Unix网络编程>的划分,IO模型可以分为:阻塞IO.非阻塞IO.IO复用.信号驱动IO和异步IO,按照POSIX标准来划分只分为两类:同步IO和异步IO.如何区分呢?首先一个IO操作其实分成了两个步骤:发起IO请求和实际的IO操作,同步IO和异步IO的区别就在于第二个步骤是否阻塞,如果实际的IO读写阻塞请求进程,那么就是同步IO,因此阻塞IO.非阻塞IO.IO服用.信号驱动IO都是同步IO,如果不阻塞,而是操作系统帮你做完IO操作再将结果返回给你,那么就是异步IO.阻塞IO和非阻塞IO

Java socket中关闭IO流后,发生什么事?(以关闭输出流为例)

声明:该博文以socket中,关闭输出流为例进行说明. 为了方便讲解,我们把DataOutputstream dout = new DataOutputStream(new BufferedOutputStream(mySocket.getOutputStream()));中的dout做为Socket输出流的代言.同样的,din是输入流的代言. 可以造成dout被关闭的操作有: 1.调用dout.close();或din.close();因为使用这种流关闭,会造成socket被关闭,所以输入输出

Java基础知识之IO(2)

文件复制小案例(温习Java基础知识之IO(1)中的知识) package copy; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class CopyDemo { public stat

Java异步非阻塞IO NIO使用与代码分析

[TOC] Java异步非阻塞IO NIO使用与代码分析 TimeServer程序的NIO实现完整代码 TimeServer程序来自书本<Netty权威指南>,nio的代码确实有些难懂(这也是后面需要使用Netty的原因之一),不过我对代码加了注释,这样一来对nio的概念及基本的使用都会有一个非常清晰的认识: 服务端程序 TimeServer.java: package cn.xpleaf.nio; public class TimeServer { public static void ma

漫谈Java IO之普通IO流与BIO服务器

今天来复习一下基础IO,也就是最普通的IO. 网络IO的基本知识与概念 普通IO以及BIO服务器 NIO的使用与服务器Hello world Netty入门与服务器Hello world Netty深入浅出 输入流与输出流 Java的输入流和输出流,按照输入输出的单元不同,又可以分为字节流和字符流的. JDK提供了很多输入流和输出流,比如: 字节流可以按照不同的变量类型进行读写,而字符流则是基于字符编码的.不同的字符编码包含的字节数是不一样的,因此在使用字符流时,一定要注意编码的问题. 读写 字

Java网络编程和NIO详解5:Java 非阻塞 IO 和异步 IO

Java网络编程和NIO详解5:Java 非阻塞 IO 和异步 IO Java 非阻塞 IO 和异步 IO 转自https://www.javadoop.com/post/nio-and-aio 本系列文章首发于我的个人博客:https://h2pl.github.io/ 欢迎阅览我的CSDN专栏:Java网络编程和NIO https://blog.csdn.net/column/details/21963.html 部分代码会放在我的的Github:https://github.com/h2p

java知识点分享,IO流详解!

Java知识IO流详解有人觉得IO知识不太重要,其实不然,IO的使用范围很广,最能体现IO价值的就是网络上的数据传递,尤其是进入互联网时代后,各种常见的分布式架构,都少不了IO的体现.并且很多大厂的面试题中都会体现出对IO的重视,包括衍生出来的NIO.序列化等等.因此学好IO,变成了一件很重要的事情.IO基本概念IO可以简单的理解成INPUT和OUT,代表输入输出的意思.输入就是读,输出就是写.IO可以读写硬盘.光盘.内存.键盘.网络等资源上的数据.流IO中的流就相当于现实生活中的水流一样,一打