首页 > 编程语言 >JAVA中的IO流技术(JAVA基础)

JAVA中的IO流技术(JAVA基础)

时间:2024-07-05 18:30:04浏览次数:24  
标签:字符 JAVA 字节 输出 处理 数据源 基础 IO

IO流的基础概念

1.如何理解IO

1.输入(Input)指的是:可以让程序从外部系统获得数据(核心含义是
“读”,读取外部数据)。
2.输出(Output)指的是:程序输出数据给外部系统从而可以操作外部
系统(核心含义是“写”,将数据写出到外部系统)。
3.java.io包为我们提供了相关的API,实现了对所有外部系统的输入输
出操作,这就是IO的基础概念

2.数据源

数据源分为:源设备、目标设备。
1 源设备:为程序提供数据,一般对应输入流。
2 目标设备:程序数据的目的地,一般对应输出流。

3.流的概念

1.流是一个抽象、动态的概念,是一连串连续动态的数据集合。
对于输入流而言,数据源就像水箱,流(stream)就像水管中流动着
的水流,程序就是我们最终的用户。我们通过流(A Stream)将数
据源(Source)中的数据(information)输送到程序(Program)中。


2.对于输出流而言,目标数据源就是目的地(dest),我们通过流(A
Stream)将程序(Program)中的数据(information)输送到目
的数据源(dest)中。

4.JAVA中按照IO流进行不同的工作进行分类

1.按流的方向分类:

输入流:数据流向是数据源到程序(以InputStream、Reader结尾的流)
输出流:数据流向是程序到目的地(以OutPutStream、Writer结尾的流)

2.按处理的数据单元分类:

字节流:以字节为单位获取数据,命名上以Stream结尾的流一般是字节流,如FileInputStream、
FileOutputStream
字符流:以字符为单位获取数据,命名上以Reader/Writer结尾的流一般是字符流,如
FileReader、FileWriter

3.按处理对象不同分类

节点流:可以直接从数据源或目的地读写数据,如FileInputStream、FileReader、
DataInputStream等。
处理流:不直接连接到数据源或目的地,是”处理流的流”。通过对其他流的处理提高程序的性能,
如BufferedInputStream、BufferedReader等。处理流也叫包装流

5.Java中IO流类的体系

1.InputStream
此抽象类是表示字节输入流的所有类的父类。InputSteam是一个抽
象类,它不可以实例化。 数据的读取需要由它的子类来实现。根据
节点的不同,它派生了不同的节点流子类 。
2.OutputStream
此抽象类是表示字节输出流的所有类的父类。输出流接收输出字节
并将这些字节发送到某个目的地。

3.Reader
Reader用于读取的字符流抽象类,数据单位为字符。

4.Writer
Writer用于输出的字符流抽象类,数据单位为字符。

6.IO流的基础写法示范

使用最新的try-with-resource进行示范

//使用try-with-resource的方式,会帮我们自动关闭流
public class Test {
public static void main(String[] args) {
try(
FileInputStream fis = newFileInputStream("d:/a.txt");//在try中打开资源,不需要在代码中添加
){
StringBuilder sb = new StringBuilder();//创建字符对象
int temp=0;
while((temp = fis.read()) != -1){//判读返回的值是否为空
sb.append((char) temp);//进行字符串拼接
}
System.out.println(sb);//输出
}catch(Exception e){
e.printStackTrace();
}
}

7.四个基本抽象类的常用实现类

1.InputStream的实现类:


1.FileInputStream:节点流:以字节为单位直接操作“文件”,进行输入
2.BufferedInputStream:处理流:将InputStream对象进行包装,增加缓
存功能,提高读写效率
3.DataInputStream:处理流:以字节为单位直接操作“基本数据类型与字符串类型,进行输入
4.ObjectInputStream:处理流:以字节为单位直接操作“对象”进行输入


2.OutputStream的实现类:


1.FileOutputStream:节点流:以字节为单位直接操作“文件”,进行输出
2.BufferedOutputStream:处理流:OutputStream对象进行包装,增加缓
存功能,提高读写效率
3.DataOutputStream:处理流:以字节为单位直接操作“基本数据类型与字符串类型,进行输出
4.ObjectOutputStream:处理流:以字节为单位直接操作“对象”进行输出


3.Reader的实现类


1.FileReader:节点流:以字符为单位直接操作“文本文件”(注意:只能读写文
本文件)进行输入
2.BufferedReader:处理流:将Reader对象进行包装,增加缓存功能,提高
读写效率
3.InputStreamReader:处理流:将字节流对象转化成字符流对象


4.Writer的实现类


1.FileWriter:节点流:以字符为单位直接操作“文本文件”(注意:只能读写文
本文件)进行输出
2.BufferedWriter:处理流:将Writer对象进行包装,增加缓存功能,提高
读写效率
3.OutputStreamWriter:处理流:将字符流对象转化成字节流对象
PrintWriter:自身携带缓存功能的字符输出流

8.Apache commons-io工具包的使用

1.commons-io工具包
Apache的commons-io工具包中提供了IOUtils/FileUtils类,为我们
提供了更加简单、功能更加强大的文件操作和IO流操作功能。

下载地址
https://commons.apache.org/proper/commons-io/download_i
o.cgi

标签:字符,JAVA,字节,输出,处理,数据源,基础,IO
From: https://blog.csdn.net/m0_63025333/article/details/140188586

相关文章

  • C++基础知识持续更新,今天来记录结构体的基本知识,包括结构体的定义和使用,结构体数组,结
    C++结构体C++基础知识持续更新,今天来记录结构体的基本知识,包括结构体的定义和使用,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数,结构体中的const的使用场景,以及结构体的案例。1.结构体的定义和使用结构体属于用户自定义的数据类型,允许用户存储不同的数据类型。......
  • nodejs 安装使用ip2region - 实时精准的IP地址到区域运营商查询
    ip2region简介ip2region是一个高性能且高准确度的离线IP地址定位库和IP定位数据管理框架。它能够根据IP地址解析出对应的位置信息,包括国家、地区、省份、城市以及互联网服务提供商(ISP)。以下是ip2region的一些关键特性:高准确率:它声称有99.9%的准确率,这使得它......
  • Java基础
    Java基础部分,包括语法基础,泛型,注解,异常,反射和其它(如SPI机制等)。@立刀旁目录#1.1语法基础#面向对象特性?#a=a+b与a+=b的区别#3*0.1==0.3将会返回什么?true还是false?#能在Switch中使用String吗?#对equals()和hashCode()的理解?#final、fin......
  • MinIO使用记录
    探索MinIO:高性能、分布式对象存储解决方案注:本文除代码外多数为AI生成最近因为有项目需要换成AmazonS3的云存储,所以把之前做过的minio部分做一个记录,后面也会把基于这版改造的S3方法发出来记录。MinIO简介MinIO是一款高性能、分布式对象存储服务器,设计用于在大规模环境中......
  • 在Linux中,如何给最小化安装系统,进行基础优化?
    在Linux中,尤其是对于最小化安装的系统,进行基础优化可以显著提高系统的性能、稳定性和安全性。以下是一些针对最小化安装的Linux系统进行基础优化的步骤:1.更新系统首先,确保你的系统是最新的,这可以修复已知的安全漏洞和bug。使用以下命令进行更新:#对于基于Debian的系统(如Ubuntu......
  • JS之基础
    近些年来,一直从事后端开发,只有刚开始入行的时候,还是前后端不分离的时代,就是一套组合:jQuery+PHP后来的工作中就是前后端分离的开发模式,也就专心从事后端的开发,几经变更,后端语言也涉猎了很多,但是前端的技术已经是日新月异.有些语法或者基础都已经不熟悉了,至此总结,......
  • Java使用线程实现异步运行
    在Java中,实现异步运行的一个常用方式是使用Thread类。下面,我将给出一个详细且完整的示例,该示例将创建一个简单的异步任务,该任务将模拟一个耗时的操作(比如,模拟网络请求或文件处理)。1.使用Thread类实现异步运行假设我们有一个任务,该任务需要模拟一个耗时操作,比如从网络下载一个大......
  • Java使用线程实现异步运行
    在Java中,实现异步运行的一个常用方式是使用Thread类。下面,我将给出一个详细且完整的示例,该示例将创建一个简单的异步任务,该任务将模拟一个耗时的操作(比如,模拟网络请求或文件处理)。1.使用Thread类实现异步运行假设我们有一个任务,该任务需要模拟一个耗时操作,比如从网络下载一......
  • java中stream流的操作详解
    1.Java8之后引入的Stream流为我们提供了便捷的集合数据处理方式一,常用方法1.filter;过滤集合中符合条件的数据2.distinct();过滤掉集合中重复的元素,过滤的是所有元素都相同的对象3.sorted();对集合中元素进行排序,用来排序的元素类型必须是int才行4.limit(longn);返回前n个......
  • 从jvm层面搞懂java的i++
    >本博客将从java字节码的层面解剖为什么i=0;i=i++;仍然会等于0字节码解析:iconst_x:代表将常量x放到操作数栈中istore_x:其中x必须是局部变量表中的一个合法下标,然后我们会从操作数栈中弹出对应的栈尾的元素(需要是int)以之来进行设置iload_x:则是加载对应的局部变量表的x......