高效IO之Java IO体系(一)

java必知必会-java IO 本文主要介绍了javaio的使用 阅读详情

更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680

个人觉得可以用“字节流操作类和字符流操作类组成了Java IO体系”来高度概括Java IO体系。

借用几张网络图片来说明(图片来自 http://blog.youkuaiyun.com/zhangerqing/article/details/8466532 )

** 基于字节的IO操作**

|
19956127-ca13f936b0a6e6ad.png
image

|
19956127-230669427e939635.png
image

|
基于字符的IO操作

|
19956127-3f407424923dd760.png
image

|
19956127-7916af21614855ab.png
image

|

从上图可以看到,整个Java IO体系都是基于字符流(InputStream/OutputStream) 和 字节流(Reader/Writer)作为基类,根据不同的数据载体或功能派生出来的。

IO常用类

  • 文件流:FileInputStream/FileOutputStream, FileReader/FileWriter

这四个类是专门操作文件流的,用法高度相似,区别在于前面两个是操作字节流,后面两个是操作字符流。它们都会直接操作文件流,直接与OS底层交互。因此他们也被称为节点流。

注意使用这几个流的对象之后,需要关闭流对象,因为java垃圾回收器不会主动回收。不过在Java7之后,可以在 try() 括号中打开流,最后程序会自动关闭流对象,不再需要显示地close。

下面演示这四个流对象的基本用法,

 1 package io;
 2 
 3 import java.io.FileInputStream;
 4 import java.io.FileNotFoundException;
 5 import java.io.FileOutputStream;
 6 import java.io.FileReader;
 7 import java.io.FileWriter;
 8 import java.io.IOException;
 9 
10 public class TestIO {
11     public static void FileInputStreamTest() throws IOException {
12         FileInputStream fis = new FileInputStream("tmp2.txt");
13         byte[] buf = new byte[1024];
14         int hasRead = 0;
15         
16         //read()返回的是单个字节数据(字节数据可以直接专程int类型),但是read(buf)返回的是读取到的字节数,真正的数据保存在buf中
17         while ((hasRead = fis.read(buf)) > 0) {
18             //每次最多将1024个字节转换成字符串,这里tmp2.txt中的字符小于1024,所以一次就读完了
19             //循环次数 = 文件字符数 除以 buf长度
20             System.out.println(new String(buf, 0 ,hasRead));
21             /*
22              * 将字节强制转换成字符后逐个输出,能实现和上面一样的效果。但是如果源文件是中文的话可能会乱码
23              
24             for (byte b : buf)    {
25                 char ch = (char)b;
26                 if (ch != '\r')
27                 System.out.print(ch);
28             }
29             */
30         }
31         //在finally块里close更安全
32         fis.close();
33     }
34     
35     public static void FileReaderTest() throws IOException {
36         
37         try (
38                 // 在try() 中打开的文件, JVM会自动关闭
39                 FileReader fr = new FileReader("tmp2.txt")) {
40             char[] buf = new char[32];
41             int hasRead = 0;
42             // 每个char都占两个字节,每个字符或者汉字都是占2个字节,因此无论buf长度为多少,总是能读取中文字符长度的整数倍,不会乱码
43             while ((hasRead = fr.read(buf)) > 0) {
44                 // 如果buf的长度大于文件每行的长度,就可以完整输出每行,否则会断行。
45                 // 循环次数 = 文件字符数 除以 buf长度
46                 System.out.println(new String(buf, 0, hasRead));
47                 // 跟上面效果一样
48                 // System.out.println(buf);
49             }
50         } catch (IOException ex) {
51             ex.printStackTrace();
52         }
53     }
54     
55     public static void FileOutputStreamTest() throws FileNotFoundException, IOException {
56         try (    
57                 //在try()中打开文件会在结尾自动关闭
58                 FileInputStream fis = new FileInputStream("tmp2.txt");
59                 FileOutputStream fos = new FileOutputStream("tmp3.txt");
60                 ) {
61             byte[] buf = new byte[4];
62             int hasRead = 0;
63             while ((hasRead = fis.read(buf)) > 0) {
64                 //每读取一次就写一次,读多少就写多少
65                 fos.write(buf, 0, hasRead);
66             }
67             System.out.println("write success");
68         } catch (IOException e) {
69             e.printStackTrace();
70         }
71     }
72     
73     public static void FileWriterTest() throws IOException {
74         try (FileWriter fw = new FileWriter("tmp4.txt")) {
75             fw.write("天王盖地虎\r\n");
76             fw.write("宝塔镇河妖\r\n");
77         } catch (IOException e) {
78             e.printStackTrace();
79         }
80     }
81     public static void main(String[] args) throws IOException {
82         //FileInputStreamTest();
83         //FileReaderTest();
84         //FileOutputStreamTest();
85         FileWriterTest();
86     }
87 }
  • 包装流:PrintStream/PrintWriter/Scanner

PrintStream可以封装(包装)直接与文件交互的节点流对象OutputStream, 使得编程人员可以忽略设备底层的差异,进行一致的IO操作。因此这种流也称为处理流或者包装流。

PrintWriter除了可以包装字节流OutputStream之外,还能包装字符流Writer

Scanner可以包装键盘输入,方便地将键盘输入的内容转换成我们想要的数据类型。

  • 字符串流:StringReader/StringWriter

这两个操作的是专门操作String字符串的流,其中StringReader能从String中方便地读取数据并保存到char数组,而StringWriter则将字符串类型的数据写入到StringBuffer中(因为String不可写)。

  • 转换流:InputStreamReader/OutputStreamReader

这两个类可以将字节流转换成字符流,被称为字节流与字符流之间的桥梁。我们经常在读取键盘输入(System.in)或网络通信的时候,需要使用这两个类

  • 缓冲流:BufferedReader/BufferedWriter , BufferedInputStream/BufferedOutputStream

Oracle官方的描述:

Most of the examples we've seen so far use unbuffered I/O. This means each read or write request is handled directly by the underlying OS. This can make a program much less efficient.

Buffered input streams read data from a memory area known as a buffer; the native input API is called only when the buffer is empty. Similarly, buffered output streams write data to a buffer, and the native output API is called only when the buffer is full.

即,没有经过Buffered处理的IO, 意味着每一次读和写的请求都会由OS底层直接处理,这会导致非常低效的问题。

经过Buffered处理过的输入流将会从一个buffer内存区域读取数据,本地API只会在buffer空了之后才会被调用(可能一次调用会填充很多数据进buffer)。

经过Buffered处理过的输出流将会把数据写入到buffer中,本地API只会在buffer满了之后才会被调用。

BufferedReader/BufferedWriter可以将字符流(Reader)包装成缓冲流,这是最常见用的做法。

另外,BufferedReader提供一个readLine()可以方便地读取一行,而FileInputStream和FileReader只能读取一个字节或者一个字符,

因此BufferedReader也被称为行读取器

下面演示上面提到的常见类,

1 package io;
  2 
  3 import java.io.BufferedReader;
  4 import java.io.FileInputStream;
  5 import java.io.FileNotFoundException;
  6 import java.io.FileOutputStream;
  7 import java.io.FileReader;
  8 import java.io.IOException;
  9 import java.io.InputStreamReader;
 10 import java.io.PrintStream;
 11 import java.io.PushbackReader;
 12 import java.io.StringReader;
 13 import java.io.StringWriter;
 14 
 15 public class TestIO {
 16     public static void printStream() throws FileNotFoundException, IOException {
 17         try (
 18                 FileOutputStream fos = new FileOutputStream("tmp.txt");
 19                 PrintStream ps = new PrintStream(fos)) {
 20             ps.println("普通字符串\n");
 21             //输出对象
 22             ps.println(new TestIO());
 23         } catch (IOException e) {
 24             e.printStackTrace();
 25         }
 26         System.out.println("输出完成");
 27                 
 28     }
 29     public static void stringNode() throws IOException {
 30         String str = "天王盖地虎\n"
 31                 + "宝塔镇河妖\n";
 32         char[] buf = new char[32];
 33         int hasRead = 0;
 34         //StringReader将以String字符串为节点读取数据
 35         try (StringReader sr = new StringReader(str)) {
 36             while ((hasRead = sr.read(buf)) > 0) {
 37                 System.out.print(new String(buf, 0, hasRead));
 38             }
 39         } catch (IOException e) {
 40             e.printStackTrace();
 41         }
 42         
 43         //由于String是一个不可变类,因此创建StringWriter时,实际上是以一个StringBuffer作为输出节点
 44         try (StringWriter sw = new StringWriter()) {
 45             sw.write("黑夜给了我黑色的眼睛\n");
 46             sw.write("我却用它寻找光明\n");
 47             //toString()返回sw节点内的数据
 48             System.out.println(sw.toString());
 49         } catch (IOException e) {
 50             e.printStackTrace();
 51         }
 52     }
 53     
 54     public static void keyIn() throws IOException {
 55         try (
 56                 //InputStreamReader是从byte转成char的桥梁
 57                 InputStreamReader reader = new InputStreamReader(System.in);
 58                 //BufferedReader(Reader in)是char类型输入的包装类
 59                 BufferedReader br = new BufferedReader(reader);
 60                 ) {
 61             String line = null;
 62             while ((line = br.readLine()) != null) {
 63                 if (line.equals("exit")) {
 64                     //System.exit(1);
 65                     break;
 66                 }
 67                 System.out.println(line);
 68             }
 69         } catch (IOException e) {
 70             e.printStackTrace();
 71         }
 72     }
 73     
 74     public static void pushback() throws FileNotFoundException, IOException {
 75         try (PushbackReader pr = new PushbackReader(new FileReader("C:/PROJECT/JavaBasic/PROJECT_JavaBasic/src/io/TestIO.java"),64)) {
 76             char[] buf = new char[32];
 77             String lastContent = "";
 78             int hasRead = 0;
 79             while ((hasRead = pr.read(buf)) > 0) {
 80                 String content = new String(buf, 0, hasRead);
 81                 int targetIndex = 0;
 82                 if ((targetIndex = (lastContent + content).indexOf("targetIndex = (lastContent + content)")) > 0) {
 83                     pr.unread((lastContent + content).toCharArray());
 84                     if (targetIndex > 32) {
 85                         buf = new char[targetIndex];
 86                     }
 87                     pr.read(buf , 0 , targetIndex);
 88                     System.out.println(new String(buf, 0 , targetIndex));
 89                     System.exit(0);
 90                 } else {
 91                     System.out.println(lastContent);
 92                     lastContent = content;
 93                 }
 94             }
 95         } catch (IOException e) {
 96             e.printStackTrace();
 97         }
 98     }
 99     
100     public static void main(String[] args) throws IOException {
101         printStream();
102         //stringNode();
103         //keyIn();
104         //pushback();
105     }
106 }

总结上面几种流的应用场景:

  • FileInputStream/FileOutputStream 需要逐个字节处理原始二进制流的时候使用,效率低下
  • FileReader/FileWriter 需要组个字符处理的时候使用
  • StringReader/StringWriter 需要处理字符串的时候,可以将字符串保存为字符数组
  • PrintStream/PrintWriter 用来包装FileOutputStream 对象,方便直接将String字符串写入文件
  • Scanner 用来包装System.in流,很方便地将输入的String字符串转换成需要的数据类型
  • InputStreamReader/OutputStreamReader , 字节和字符的转换桥梁,在网络通信或者处理键盘输入的时候用
  • BufferedReader/BufferedWriter , BufferedInputStream/BufferedOutputStream , 缓冲流用来包装字节流后者字符流,提升IO性能,BufferedReader还可以方便地读取一行,简化编程。

更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680

原文转载https://www.cnblogs.com/fysola/p/6123947.html

Java IO流:全面解析与实践指南 Java IO流体系结构可以分为字节流和字符流两大分支。字节流用于处理二进制数据,而字符流用于处理字符数据,其内部是基于字节流进行处理的,但提供了更方便的字符处理方式。Java IO流提供了一套强大而灵活的API,用于处理各种输入输出操作。通过理解字节流和字符流的体系结构,掌握常用流类的使用方法,并结合实际应用场景进行实践,开发者能够在Java程序中高效地进行文件操作、网络通信以及数据处理与转换等任务。在实际开发中,根据具体需求选择合适的流类型和组合方式,能够提高程序的性能和可维护性。 阅读详情

相关推荐

Java基础IO流(知识体系详解)【五】

IO流知识体系架构图 1.字节输出流(FileOutputStream) 1.1.构造方法 a.FileOutputStream fis = new FileOutputStream(String pathName) b.FileOutputStream fis = new FileOutputStream(String pathName,boolean append) [追加写入流的构造,需要把第二个参数设置为true] c.FileOutputStream fis = new FileOutputSt

白大锅的博客,毕设WangLoveBai_999 6万+

java文件流类结构图_Java流类图结构

Java流操作有关的类或接口:Java流类图结构:流的概念和作用流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。IO流的分类根据处理数据类型的不同分为:字符流和字节流根据数据流向不同分为:输入流和输出流字符流和字节流字符流的由来: 因为数据编码的不同,而有了对字符进行高...

weixin_36254537的博客 812

Java高效IO处理工具库commons-io实战解析

在现代Java开发中,文件和流的操作频繁且复杂,尤其是在处理大量数据、跨平台文件交互、网络资源读取等场景中,传统的Java IO API虽然提供了基础支持,但往往代码冗长、异常处理繁琐、操作效率低下。Apache Commons-IO库的出现,极大地简化了这些操作,提升了开发效率与代码可维护性。Apache Commons-IO 是 Apache Commons 项目的一部分,专为简化 Java IO 操作而设计。它提供了一系列静态工具类(如FileUtilsIOUtils。

weixin_36303305的博客 914

Java I/O系统----------- 类图框架

Java类库中的I/O类分成输入和输出两部分,通过继承,任何自InputStream或Reader派生而来的类都含有名为read()的基本方法,用于读取单个字节或者字节数组。同样,任何自OutputStream或Writer派生而来的类都含有名为write()的基本方法,用于写单个字节或者字节数组。但是,通常不会用到这些方法,它们之所以存在是因为别的类可以使用它们,以便提供更有用的接口。因此,很少使用单一的类来创建流对象,而是通过叠合多个对象来提供所期望的功能(这就是装饰器设计模式)。实际上,Java中“流

用我一生换你十年天真无邪 4208

Homebrew国内镜像自动安装全攻略:从零到精通

本文提供了一份详尽的Homebrew国内镜像自动安装指南,旨在帮助Mac用户,特别是国内开发者,快速、无痛地部署这一强大的包管理器。通过使用优化的国内镜像脚本,实现一键自动安装,有效解决官方源访问缓慢或失败的问题。文章从安装前准备、脚本执行步骤、原理讲解到日常使用命令和常见问题排查,提供了从零到精通的完整路径,让用户在短时间内掌握Homebrew的核心用法,提升开发与工作效率。

a0b1c2d3的专栏 969

英飞凌TC3xx DSADC旋变软解码实战:从示波器波形到VX1000数据,手把手教你避坑

本文详细介绍了英飞凌TC3xx系列微控制器的DSADC模块在电机旋变软解码中的实战应用。从示波器波形分析到VX1000数据采集,提供了一套完整的调试方法论,帮助工程师快速定位和解决常见问题,提升解码精度和系统性能。

weixin_30598225的博客 517

Java IO类图

Java的IO体系在java.io包中,重要的类包括:File、InputStream、OutputStream、Reader、Writer、RandomAccessFile。 1. File(文件特征与管理):用于文件或者目录的描述信息。 2. InputStream(二进制格式操作):抽象类,基于字节的输入操作,是所有输入流的父类。 3. OutputStream(二进制格式操作):抽象类,基...

geekooler的博客 1024

SYSU-MM01数据集评估避坑指南:从RGB/IR图像理解到Python评估脚本调优

本文详细解析了SYSU-MM01数据集在跨模态行人重识别(ReID)评估中的关键技巧与常见陷阱。从RGB/IR图像理解到Python评估脚本优化,提供了数据评估模式选择、single-shot/multi-shot差异分析、特征文件处理规范等实用指南,帮助研究者避开指标异常问题,提升评估效率与准确性。

weixin_29044713的博客 197

JAVA------IO流

目录 一、IO流概述 二、IO流的分类 1.Java IO类图 2.下面用一张表格详细讲解IO流的分类: 三.四个抽象基类 1.1.字节流 ①概述: ②练习: 1.2.字节流缓冲区 2.1字符流 ①. 字符流简介: ②.字符流读写: 思考: 2.2.缓冲区 扩展:了解装饰设计模式 四.流操作的基本规律 五.指定编码表(转换流可以指定编码表) 一、IO流概述 概...

王雪亮 628

避坑指南:ZYNQ平台上AXI 1G/2.5G Ethernet Subsystem实现IEEE1588的5个关键点

本文详细解析了在ZYNQ平台上使用AXI 1G/2.5G以太网子系统实现IEEE1588精密时间协议(PTP)的5个关键避坑点。从硬件选型、Vivado工程配置到Linux驱动适配,提供了实战经验与优化技巧,帮助工程师在工业自动化、电力系统等场景中实现纳秒级时间同步。

weixin_30687051的博客 239

Vue项目实战:5分钟搞定高德地图离线部署(附避坑指南)

本文详细介绍了在Vue项目中实现高德地图离线部署的完整方案。针对内网或网络隔离环境,通过获取并改造JSAPI文件、下载组织地图瓦片数据,并集成vue-amap组件,实现地图功能的本地化运行。文中提供了核心代码、避坑指南及性能优化建议,帮助开发者快速构建稳定可靠的离线地图应用。

data3的博客 936

java IO

JAVA IO类图 一,InputStream类图 [table] |InputStream| |原始流|ByteArrayInputStream| |原始流|FileInputStream| |原始流|StringBufferInputStream| |原始流|PipedInputStream| |链接流|FilterInputStream|BufferedInputStream...

meikebo 155

分位数回归和stata

分位数回归与stata 找了半天也没找到我想看的那种完整点的stata教程,只好自己写一个了… 参考教材:《用STATA学微观计量经济学》&《高级计量经济学及STATA应用_第2版》 第一部分 纯理论 更加详细的百度吧,很长很长,这里主要是拿来和ols比较。ols是均值回归,求解的方法是残差的平方最小,而这里就是对残差的绝对值用分位数做惩罚。(思想了解一下即可) 第二部分 Stata...

Joycezzz的博客 1万+

java io的整体架构_高效IO之Java IO体系(一)

个人觉得可以用“字节流操作类和字符流操作类组成了Java IO体系”来高度概括Java IO体系。** 基于字节的IO操作**|image|image|基于字符的IO操作|image|image|从上图可以看到,整个Java IO体系都是基于字符流(InputStream/OutputStream) 和 字节流(Reader/Writer)作为基类,根据不同的数据载体或功能派生出来的。IO常用类文...

weixin_33547353的博客 116

基于 FastAPI + LangGraph + LLM 大语言模型的通用 Agent 多智能体系统架构设计与开发实战、产业应用

FastAPI是一个现代、快速(高性能)的Python Web框架,专门用于构建API。它由Sebastián Ramírez(@tiangolo)创建,基于Starlette(用于Web部分)和Pydantic(用于数据部分)构建。性能优先:FastAPI是当前最快的Python Web框架之一,性能与NodeJS和Go相当。这得益于其基于Starlette的异步架构,能够充分利用Python 3.6+的async/await特性。开发效率。

AI天才研究院 233

YOLO11涨点优化:SPPF原创自研创新 | SPPF创新结构,重新设计全局平均池化层和全局最大池化层,增强全局视角信息和不同尺度大小的特征

SPPF_improve利用全局平均池化层和全局最大池化层,加入一些全局背景信息和边缘信息,从而获取全局视角信息并减轻不同尺度大小所带来的影响

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1870

io流读取word文件 乱码_高效IO之Java IO体系(一)

更多Android高级架构进阶视频免费学习请点击:哔哩哔哩 ( ゜- ゜)つロ 乾杯~ Bilibili​space.bilibili.com个人觉得可以用“字节流操作类和字符流操作类组成了Java IO体系”来高度概括Java IO体系。借用几张网络图片来说明(图片来自 http://blog.youkuaiyun.com/zhangerqing/article/details/8466532 )** 基于...

weixin_39824801的博客 1444

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Java开发中的IO体系

Java IO体系提供了丰富的工具,用于处理各种类型的数据源,支持从字节级别到字符级别的数据操作。通过掌握这些概念和技巧,可以高效、安全地执行各种IO操作,特别是在处理大文件、高并发网络应用时,使用NIO可以显著提升性能。注意资源管理、字符编码、异常处理等细节,将有助于编写健壮的IO代码。

goTsHgo的博客 1386

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【Java SE学习】——详细学习Java IO体系

本文详细记录了学习Java IO流的笔记

CaiWangCoder的博客 945

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

java IO流学习总结

https://www.cnblogs.com/hopeyes/p/9736642.html 近期学习了Java的IO流,尝试着总结一下。 java.io 包下的IO流很多: 其中,以Stream结尾的为字节流,以Writer或者Reader结尾的为字符流。所有的输入流都是抽象类IuputStream(字节输入流)或者抽象类Reader(字符输入流)的子类,所有的输出流都是抽象类Outp...

乔志勇笔记 1万+

java io体系_Java之IO类的体系结构

Java中IO操作主要是指使用Java进行输入,输出操作,Java中所有的操作类都存放在Java.io包中,在使用时需要导入此包。在整个Java.io包中最重要的就是5个类和一个接口。5个类指的是File、OutputStream、InputStream、Writer、Reader;一个接口指的是Serializable.掌握了这些IO的核心操作那么对于Java中的IO体系也就有了一个初步的认识了...

weixin_33841242的博客 409

【Java】IO 体系及常用类

根据文件操作类的学习我们认识到,File可以操作文件,但是不能操作文件的内容,如果要操作文件的内容,可以通过字节流或者字符流。一、前言引入二、IO概念和概述讲解Java IO体系(部分)三、具体内容讲解,文件操作应用小案例四、总结2.1 基本概念阐述流的概念和作用流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。IO流的分类。

康师傅没有眼泪 837

Java中IO流体系

在 Java 中,I/O 流(Input/Output Streams)是用于处理输入和输出操作的机制。I/O 流主要用于处理外部设备(如文件、网络连接等)与程序之间的数据传输。Java 的 I/O 流库提供了丰富的类和接口来读取和写入各种数据源。把数据从磁盘、网络中读取到程序中来,用到的是输入流。把程序中的数据写入磁盘、网络中,用到的是输出流。简单记:输入流(读数据)、输出流(写数据)fill:#333;color:#333;color:#333;fill:none;IO流体系字节流抽象类。

qq_59045739的博客 696

高效IO的理解

本文介绍了高效IO替代Scanner的使用场景及实现方法。通过对比分析指出,Scanner在小规模调试时简单易用,但在大数据量输入时性能较差,而高效IO(BufferedReader)能提升10倍以上性能。给出了包含Read类和main类的完整代码实现,详细解析了StringTokenizer分割字符串和BufferedReader缓冲读取的原理。重点讲解了next()方法的工作流程,以及nextInt()、nextLine()等方法的具体实现。最后通过输入案例的执行流程图解,展示了方法调用顺序和数据处理过

xiaochuan_bsj的博客 725

java的io流有什么作用_Java IO流详解(一)——简单介绍

文件在程序中是以流的形式来传输的。所以用Java来传输文件就得使用到Java IO流。1、流的概念和作用流:代表任何有能力产出数据的数据源对象或者是有能力接受数据的接收端对象流的本质:数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。作用:为数据源和目的地建立一个输送通道2、Java IO所采用的模型Java的IO模型设计非常优秀,它使用Decorator(装饰者)模式(这篇博...

weixin_33602738的博客 4559

知识体系整理 -- Java的IO

Java领域的io模块是一个非常庞大的知识体系,在大家求职面试的过程中通常也是被问到比较多的一个模块,今天我特意整理了一份关于IO知识体系相关的干货和大家分享,希望各位读者们喜欢。 如何理解io流 io可以理解为是input 和 output的两个缩写,分别代表了数据的**”输入“和”输出“**。io流则是描述了将数据从内存和数据源之间拷贝的一个过程。 输入:数据从数据源加载到内存。 输出:数据从内存写回到数据源。 这里我所说的数据源是一个比较泛的名称,它可以是指 txt,图片,SQL,mp4等格式的文件。

Danny_idea的博客 953
上一篇: 反射与类加载之ClassLoader与类加载器(二)
下一篇: 高效IO之File文件操作类的基础用法(二)
Python_林一
博客等级 码龄7年 889粉丝 510原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值