您的位置 首页 java

Java基础,文件I/O,小白也能看懂的常识

1 文件简介

我们在日常计算机操作中,接触和处理最多的,除了上网,大概就是各种各样的文件了。下面,我们先介绍一些基本概念和常识。

1.1 二进制文件

所有文件,不论是可执行文件、图片文件、视频文件、Word文件、压缩文件、txt文件,都没什么可神秘的,它们都是以0和1的二进制形式保存的。

1.2 文件类型

虽然所有数据都是以二进制形式保存的,但为了方便处理数据,高级语言引入了数据类型的概念。文件处理也类似,所有文件都是以二进制形式保存的,但为了便于理解和处理文件,文件也有文件类型的概念。文件类型通常以扩展名的形式体现,比如,PDF文件类型的扩展名是.pdf,图片文件的一种常见扩展名是.jpg,压缩文件的一种常见扩展名是.zip。每种文件类型都有一定的格式,代表着文件含义和二进制之间的映射关系。

1.3 文件路径

文件一般是放在硬盘上的,一个机器上可能有多个硬盘,但各种操作系统都会隐藏物理硬盘概念,提供一个逻辑上的统一结构。在Windows中,可以有多个逻辑盘,如C、D、E等,每个盘可以被格式化为一种不同的文件系统,常见的文件系统有FAT32和NTFS。

1.4 文件读取

文件是放在硬盘上的,程序处理文件需要将文件读入内存,修改后,需要写回硬盘。为了提升文件操作的效率,应用程序经常使用一种常见的策略,即使用缓冲区。

2 I/O流简介

在Java中(很多其他语言也类似),文件一般不是单独处理的,而是视为输入输出(Input/Output,IO)设备的一种。I/O操作的例子包括:创建和删除文件;读写文件或网络套接字;将对象序列化(或保存)到持久存储设备中,以及从中检索保存的对象。

2.1 I/O发展

Java对I/O的支持从JDK 1.0开始就有了,主要经历了三个阶段:

  • jdk1.4之前: BIO(Blocking I/O)同步阻塞IO模式。

没有数据缓冲区,只有输入和输出流。在Java支持异步I/O之前的很长一段时间里,高性能服务端开发领域一直被C++和C长期占据,Java的同步阻塞I/O被大家所诟病。

  • jdk1.4: NIO(New I/O):支持同步阻塞和非阻塞IO模式。

实际上,新 I/O 使用 NIO (同步非阻塞)的方式重写了老的 I/O 了,因此它获得了 NIO 的种种优点。即使我们不显式地使用 NIO 方式来编写代码,也能带来性能和速度的提高。这种提升不仅仅体现在文件读写(File I/O),同时也体现在网络读写(Network I/O)中。例如,网络编程。

  • jdk1.7: AIO( Asynchronous I/O ) 支持基于文件的异步I/O操作和针对网络套接字的异步操作。

2.2 I/O分类

  • 按流的方向分为:输入流和输出流

输入流只能进行读操作,输出流只能进行写操作,程序中需要根据待传输数据的不同特性而使用不同的流。输入流:InputStream或者Reader。输出流:OutputStream或者Writer。

  • 按流的数据单位不同分为:字节流和字符流

字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。只要是处理纯文本数据,就优先考虑使用字符流。 除此之外都使用字节流。

  • 按流的功能不同分为:节点流和处理流

节点流,直接与数据源相连,读入或读出。处理流和节点流一块使用,在节点流的基础上,再套接一层,套接在节点流上的就是处理流。直接使用节点流,读写不方便,为了更快的读写文件,才有了处理流。

3 码农来洞见

本篇文章简单概述了Java文件及I/O的整体脉络和相关概念。然而,要想充分理解 Java I/O 系统以便正确运用它,我们需要学习一定数量的类。另外,理解 I/O 类库的演化过程也很有必要,因为如果缺乏历史的眼光,很快我们就会对什么时候该使用哪些类,以及什么时候不该使用它们而感到困惑。

文章来源:智云一二三科技

文章标题:Java基础,文件I/O,小白也能看懂的常识

文章地址:https://www.zhihuclub.com/178083.shtml

关于作者: 智云科技

热门文章

网站地图