java IO流分类
#java 流类图结构:
##一、 流的分类
按数据流的方向不同:输入流,输出流。
按处理数据单位不同:字节流(InputStream,OutputStream),字符流(Reader,Writer)。
(1) 字节流:数据流中最小的数据单元是字节。
(2) 字符流:数据流中最小的数据单元是字符, Java中的字符是Unicode编码,一个字符占用两个字节。按功能不同:节点流,处理流。
(1)程序用于直接操作目标设备所对应的类叫节点流。
(2)程序通过一个间接流类去调用节点流类,以达到更加灵活方便地读写各种类型的数据,这个间接流类就是处理流。
##二、节点流
###1. 节点流的类型
(1)File 文件流。对文件进行读、写操作 :FileReader、FileWriter、FileInputStream、FileOutputStream。
(2)Memory
[1]从/向内存数组读写数据: CharArrayReader与 CharArrayWriter、 ByteArrayInputStream与ByteArrayOutputStream。
[2]从/向内存字符串读写数据 StringReader、StringWriter、StringBufferInputStream。
(3)Pipe管道流。 实现管道的输入和输出(进程间通信): PipedReader与PipedWriter、PipedInputStream与PipedOutputStream。
####字节文件流:package com.senior.io;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Arrays;public class FileInputStream_FileOutputStream {
public static void main(String[] args) {
InputStream input = null;
OutputStream output = null;
try {
File file = new File(“file/file.txt”);
input = new FileInputStream(file); //没有该文件会FileNotFoundException抛异常
//FileOutputStream(String name,boolean append) append:是否可以追加文件
output = new FileOutputStream(“file/file1.txt”,true); //没有该文件会自动创建
byte[] b = new byte[3];
int count = -1;
while((count = input.read(b)) != -1) {
System.out.println(Arrays.toString(b));
output.write(b, 0, count);
}
output.flush(); //强制刷新暂存区,将所有字节强制输出
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (output !=null){
try {
output.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (input != null) {
try {
input.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
####字符文件流:package com.senior.io;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.util.Arrays;public class Reader_Writer {
public static void main(String[] args) {
Reader reader = null;
Writer writer = null;
try {
File file = new File(“file/file.txt”);
reader = new FileReader(file);
writer = new FileWriter(“file/file1.txt”);char[] ch = new char[3]; int count = -1; while ((count = reader.read(ch)) != -1) {System.out.println(Arrays.toString(ch)+" " +count);writer.write(ch, 0, count); } writer.flush(); } catch (FileNotFoundException e) {e.printStackTrace(); } catch (IOException e) {e.printStackTrace(); } finally {if (reader != null) {try {reader.close();} catch (IOException e) {e.printStackTrace();}}if (writer != null) {try {writer.close();} catch (IOException e) {e.printStackTrace();}}} }
}
###2. 节点流执行的图示
三、处理流
- 处理流的类型
-(1)Buffering缓冲流:在读入或写出时,对数据进行缓存,以减少I/O的次数:BufferedReader与BufferedWriter、BufferedInputStream与BufferedOutputStream。
- (2)Filtering 滤流:在数据进行读或写时进行过滤:FilterReader与FilterWriter、FilterInputStream与FilterOutputStream。
- (3)Converting between Bytes and Characters 转换流:按照一定的编码/解码标准将字节流转换为字符流,或进行反向转换(Stream到Reader):InputStreamReader、OutputStreamWriter。
- (4)Object Serialization 对象流 :ObjectInputStream、ObjectOutputStream。
- (5)DataConversion数据流: 按基本数据类型读、写(处理的数据是Java的基本类型(如布尔型,字节,整数和浮点数)):DataInputStream、DataOutputStream 。
- (6)Counting计数流: 在读入数据时对行记数 :LineNumberReader、LineNumberInputStream。
- (7)Peeking Ahead预读流: 通过缓存机制,进行预读 :PushbackReader、PushbackInputStream。
- (8)Printing打印流: 包含方便的打印方法 :PrintWriter、PrintStream。
- 处理流执行的图示
- 缓冲流
【1】对I/O进行缓冲是一种常见的性能优化,缓冲流为I/O流增加了内存缓冲区,增加缓冲区的两个目的:
(1)允许Java的I/O一次不只操作一个字符,这样提高䇖整个系统的性能;
(2)由于有缓冲区,使得在流上执行skip、mark和reset方法都成为可能。
【2】缓冲流:它是要“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能,
提高了读写的效率,同时增加了一些新的方法。例如:BufferedReader中的readLine方法,BufferedWriter中的newLine方法
4. 转换流
转换流有两种:
(1)InputStreamReader:将字节流转换为字符流;
(2)OutputStreamWriter:将字符流转换为字节流。
5. 数据流
数据流:DataInputStream和DataOutputStream
(1)DataInputStream和DataOutputStream是面向字节的,因此要使用InputStream和OutputStream。
(2)DataInputStream和DataOutputStream分别继承InputStream和OutputStream,
它们属于处理流,需要分别“套接”在InputStream和OutputStream类型的节点流上。
(3)DataInputStream和DataOutputStream提供了可以存取与机器无关的Java原始类数据(如:int,double等)的方法。
(4)DataInputStream和DataOutputStream的构造方法:
DataInputStream(InputStream in)
DataOutputStream(OutputStream out)
java IO流分类相关推荐
- Java IO流总结
Java IO流分类以及主要使用方式如下: IO流 |--字节流 |--字节输入流 InputStream: int read();//一次读取一个字节 int read(byte[] bys);// ...
- java io流区别_Java中IO流的分类和BIO,NIO,AIO的区别
到底什么是IO 我们常说的IO,指的是文件的输入和输出,但是在操作系统层面是如何定义IO的呢?到底什么样的过程可以叫做是一次IO呢? 拿一次磁盘文件读取为例,我们要读取的文件是存储在磁盘上的,我们的目 ...
- Java IO流学习总结(一)—— IO流分类和常用IO流汇总
Java IO流学习总结(一)-- IO流分类和常用IO流汇总 IO流的分类: - 按流向分类:输入流.输出流 - 按操作对象分类:字节流.字符流 - 按功能分类:节点流.处理流 IO流的设计模式为装 ...
- Java基础 -IO入门简介、文件操作、与IO流分类简述
文章目录 IO流入门概念 文件概念 什么是文件 文件流 文件常用操作 创建文件对象相关构造器和方法 创建文件案例 注意 获取文件相关信息 目录的操作和文件删除 delete mkdir.mkdirs ...
- java io流读写文件换行_java基础io流——OutputStream和InputStream的故事(温故知新)...
io流概述: IO流用来处理设备之间的数据传输,上传文件和下载文件,Java对数据的操作是通过流的方式,Java用于操作流的对象都在IO包中. IO流分类 按照数据流向 输入流 读入数据 输出流 写出 ...
- java io流大全_Java IO流系统整理
Java IO流的分类 Java中的流,可以从不同的角度进行分类. 按流向分类: 输入流: 程序可以从中读取数据的流. 输出流: 程序能向其中写入数据的流. 按数据传输单位分类: 字节流:以字节(8位 ...
- java io流 教程_Java基础教程:IO流与文件基础
Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:指的是从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列 ...
- java IO流小结
Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...
- java io流的学习总结~~
java io流的学习总结~~ 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类, ...
- Java IO流简介
Java中的流是什么? java中的流是一个抽象的概念,在java的程序中需要把文件从一个设备传输到另一个设备上,这个设备可以是内存,程序,文件,网络.把在这些之间传输的叫做流.官方的解释:流是一组有 ...
最新文章
- 跟阿里云技术专家阙寒一起深度了解视频直播CDN技术
- CSS Float(浮动)
- 第 5 章 Spring Boot
- 【Python Turtle合集】有趣好玩的代码当然要分享给大家啦~(皮卡丘、玫瑰花、小黄人......)
- python中内置的数据结构有几种?
- h5是什么 www.php.cn,20分钟看懂html5 看看H5都有啥新特性
- 移动端HTML响应式布局之神奇的pt(自测99.99%与设计图一致)
- 数据结构——二叉树的层次遍历
- 应用程序的主入口点应用程序的主入口点应用程序的主入口点
- 36产生用户恶情绪和报复情绪的原因
- 开启 NFS 文件系统提升 Vagrant 共享目录的性能
- JavaHelp 开发系统帮助(二)
- 力扣77.组合(JavaScript)
- 安装了mySQL后怎么导入数据_mysql安装、配置、导入数据库
- Java滑动窗口实现当前窗口内最大值输出
- 【codeVS 1082】树状数组(区间修改,区间查询)模版题
- L298电机驱动原理图+PCB
- 亮相SIGGRAPH 太极拳三维教学App制作揭秘
- 考研数学二-汤家凤中值定理
- httpPost.setHeader,httpPost.addHeader 区别
热门文章
- 安利超实用的游戏unity3d场景模型素材网站
- LDAP——实现用户统一登录管理
- iozone文件系统测试工具
- 宽度学习系统(BLS)的原理、变体形式及当前应用(随时更新......)
- 自适应滤波器5-最小二乘法(LSM)
- FileInputStreamFileOutputStream 和 BufferedInputStreamBufferedOutputStrem的性能测试小案例
- three.js 加载fbx文件并解析
- 基于SpringBoot超市库存管理系统+文档
- python遍历文件夹下的所有文件
- 分享一款超好用的 Web SSH 客户端工具