JavaSE学习之IO流使用技巧
学习过java的小伙伴和将要学习java的小伙伴,都会遇到java中很重要的一块内容,即IO流。翻开java工具书可以发现IO流中有很多类,那么问题来了,就是,开发时该用哪个对象合适呢?或者如何选择使用对象呢?下面笔者根据自己的经验跟各位小伙伴分享下。
第一步,首先,明确IO流中有两个主要的体系,即字节输入流(InputStream)、输出流(OutputStream)和字符输入流(Reader)、输出流(Writer)。其次,明确数据的来源和数据将要到达的目的地。
第二步,明确将要操作的数据是否是纯文本数据。如果数据源是纯文本数据选Reader;数据源不是纯文本数据选择InputStream。如果数据目的地是纯文本数据就选择Writer;如果不是则选择OutputStream。
- 数据源:
是纯文本:Reader
不是纯文本:InputStream - 数据目的地:
是纯文本:Writer
不是纯文本:OutputStream
第三步,明确具体的设备。即数据源是从哪个设备来的:是硬盘就加File;是键盘用System.in(是一个InputStream对象);是内存用数组;是网络用Socket流。同样目的是哪个设备:是硬盘就加File;是键盘用System.out(是一个OutoutStream对象);是内存用数组;是网络用Socket流。
明确设备:
- 数据源:
- 键盘:System.in
- 硬盘:FileXXX
- 内存:数组
- 网络:socket socket.getInputStream();
- 数据汇:
- 控制台:System.out
- 硬盘:FileXXX
- 内存:数组
- 网络:socket socket.getOutputStream();
第四步,明确是否还需要其他额外功能呢,例如①是否需要较高的效率,即是否需要使用缓冲区,是就加上Buffered;②是否需要转换,是,就使用转换流,InputStreamReader 和OutputStreamWriter。
明确额外功能:
1. 需要转换?是,使用转换流。InputStreamReader 和 OutputStreamWriter
2. 需要高效?是,使用缓冲区。Buffered
通过上面的四步走基本就可以确定该用哪个类了。如果小伙们看了上面讲解,还是有点似懂非懂,那么,接下来大家可以看看下面的例子。把上面的四步走带入走一遍,应该就可以相当清楚了。例子如图所示。
需求:复制一个文本文件。
1. 明确体系:
源:InputStream,Reader
目的:OutputStream,Writer
2. 明确数据:
源:是纯文本吗?是 Reader
目的:是纯文本吗?是 Writer
3. 明确设备:
源:硬盘上的一个文件。FileReader
目的:硬盘上的一个文件。FileWriter
FileReader fr = new FileReader(“a.txt”);
FileWriter fw = new FileWriter(“b.txt”);
4. 需要额外功能吗?
需要,高效,使用buffer
BufferedReader bufr = new BufferedReader(new FileReader(“a.txt”));
BufferedWriter bufw = new BufferedWriter(new FileWriter(“b.txt”));
读取磁盘录入,将数据存入到一个文件中。
1. 明确体系:
源:InputStream,Reader
目的:OutputStream,Writer
2. 明确数据:
源:是纯文本吗?是 Reader
目的:是纯文本吗?是 Writer
3. 明确设备:
源:键盘,System.in
目的:硬盘,FileWriter
InputStream in =System.in;
FileWriter fw = new FileWriter(“a.txt”);
4. 需要额外功能吗?
需要,英文源明确的体系时Reader,可是源的设备是System.in。
所以为了方便于操作文本数据,将源转成字符流。需要转换流。InputStreamReader
InputStreamReader inr = new InputStreamReader(System.in);
FileWriter fw = new FileWriter(“a.txt”);
需要高效不?需要。Buffer
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw = new BufferedWriter(new FileWriter(“a.txt”));
注:上面讲的规律适用于IO流中比较常用的类,当然还有其他一些类需要大家个别掌握。
JavaSE学习之IO流使用技巧相关推荐
- JavaSE进阶:IO流
目录 1.流的概念 2.流的分类 3.字节流 1.字节流的父类 2.文件字节流 1.ASCALL码对照表 2.文件字节输入流 3.文件字节输出流 4.文件字节流来实现文件的复制 3.字节缓冲流 1.B ...
- java流类图结构_java学习之IO流(学习之旅,一)
个人在学习IO流的时候看到如下所示java 流类图结构的时候,我的感想是,这么多··处于蒙的状态. Java流类图结构 这么多,没有分类不好学,那我们就慢慢一口一口的吃,这样每天学习一点就好了,其实很 ...
- JavaSE进阶26 - IO流概述、字节流、字符流、转换流、缓冲流
目录 IO概述 FileInputStream的使用 FileOutputStream使用 文件复制 文件的复制原理 代码 FileReader FileWriter 复制普通文本文件 Buffere ...
- zipfile中怎么关闭流_深入学习JAVA -IO流详解
(一)IO流基本概念 Java对数据的操作是通过流的方式,io是java中实现输入输出的基础,它可以很方便的完成数据的输入输出操作,Java把不同的输入输出抽象为流,通过流的方式允许Java程序使用相 ...
- JAVA学习笔记—IO流
I/O 框架 流的概念 内存与存储设备之间传输数据的通道 水(相当于数据)-> 传输水的管道(相当于流)-> 脸盆(相当于内存) 生活用水 -> 流入 家庭废水 -> 流出 流 ...
- 【java学习笔记-io流 文件读写和键盘读写】带缓存的输入/输出流和数据输入/输出流
文章目录 字节流类 带缓存的输入/输出流 BufferedReader与BufferedWriter类 下面的例子程序演示了read()方法,从控制台读取字符直到用户键入"q": ...
- Java io流小技巧_选择用流的小规律(java)基本的io流
选择流的规律 1 首先我们要明确源和目的 源: InputStream Reader 目的::OutputStream Write 2 我们要判断源和目的是不是纯文本 源是纯文本 :Reader 否则 ...
- JavaSE学习---I/O流学习分享
I/O流概述: i:Input,以内存为基准,表示从硬盘中读取数据到内存中. o: Outerput,以内存为基准,表示将内存中的数据写到硬盘中. I/O流体系 原始流 1.原始字节流 FileIn ...
- Java学习:IO流篇(多种流的总结)
一,字节流 主要用到以下两个类: 类名 作用 FileInputStream 从文件系统中的文件获取输入字节 FileOutputStream 用于将数据写入到输出流File或一个FileDescri ...
最新文章
- 欧洲打击洗钱 全球联合行动 178名钱骡落网
- (转) Java线程同步阻塞, sleep(), suspend(), resume(), yield(), wait(), notify()
- rtp h264打包和解包
- TensorSpace:超酷炫3D神经网络可视化框架
- SQL语句:SQLwhile(0=0)与while @@fetch_status=0.
- UVA - 1533Moving Pegs移动小球 (bfs加状态压缩)
- PyTorch常用代码段整理合集
- 浅谈socket网络编程函数参数(二)
- Spring Bean的生命周期及接口回调
- VC++中多线程学习(MFC多线程)二(线程的相关操作、线程间的通信)
- 【Pytorch】Pytorch常见的坑汇总
- 安卓接入高德地图3dmap黑屏问题解决
- 济南大学计算机控制系统,杨波-济南大学人工智能研究院
- MIT操作系统神课 - 6.828
- matlab如何画之字形,matlab怎么画星座图
- 前端项目-尚品会-来自b站尚硅谷视频
- 珍藏5年的5000款photoshop顶尖字体库,这回不用担心没有好的PS字体了!
- HEX编码、Base64编码
- Amnesia失忆症攻略(本篇+later+crowd)
- Android 无法播放此视频
热门文章
- iOS开发之FMDB
- 一个IP绑定多个域名(虚拟主机)设置方法
- Strtus2工作流程及原理
- 诺基亚对塞班的支持将持续到2016年
- Linux下的Vsftpd配置篇
- 一个wxWidgets判断注册表键值的函数
- ubuntu20.04下面matlabR2015b的夜间模式设置
- Hbase中的Column Family(转载)
- Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since
- pg_config executable not found