Java中的输入流与输出流
一、流的概念
在Java中,流是从源到目的地的字节的有序序列。Java中有两种基本的流——输入流(InputStream)和输出流(OutputStream)。
根据流相对于程序的另一个端点的不同,分为节点流和过滤流。
(1)节点流:以特定源如磁盘文件、内存某区域或者线程之间的管道为端点的构造输入输出流,是一种基本的流。
(2)过滤流:以其他已经存在的流为端点构造的输入输出流。
根据流中的数据单位分为字节流和字符流。
(1)字节流:流中的数据是以8位字节为单位进行读写,以InputStream和OutputStream为基础类。
(2)字符流:流中的数据是以16为字符为单位进行读写,以Reader和Writer为基础类。
二、字节流
InputStream和OutputStream是字节流的两个顶层父类,提供了输入流类和输出流类的通用API。
1、输入字节流
InputStream基本方法:
(1)基本读方法;: int read() int read(byte[] b) int read(byte[] b,int off,int len)
(2) 关闭流:void close()
(3) 返回输入流中还有多少可读字节 int available()
(4) 跳过指定字节 long skip(long n)
(5) 回读数据 boolean markSupported() void Mark(int readlimt) void reset()
2 、输出字符流
OutputStream基本方法:
(1)基本写方法:void write(int c) void write(byte[] b) void write(byte[] b,int off,int len)
(2) 关闭流:void close()
(3)q强制输出:void flush()
三、字符流
Reader和Writer是字符流的顶层父类,字符流能够处理Unicode字符集中的所有字符。成员方法和字节流类似。
四、输入输出流的套接
节点流在程序中不是很常见,一般通过过滤流将多个流套接起来,利用各个流的特性共同处理数据。
例如下图:一个文件流为了为了提高效率,套接了缓存流,最后套接了数据流。

五、常见的输入输出流
1、文件流:文件流属于节点流,包括FileInputStream和FileOutputStream类以及Reader和Writer类。这些类都是对文件系统中的文件进行读写。文件流的创建是调用相应的构造方法,并经常以字符串形式的文件名或者一个File类的对象为参数,例如:
1 public FileInputStream(String name);
2 public FileInputStream(File file);
例如使用文件流实现文件的复制:
package ch01; 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; public class CopyBytes { public static void main(String[] args) throws IOException {
FileInputStream fileis = new FileInputStream(new File("E:\\file/FileTest01.txt"));
FileOutputStream fileos = new FileOutputStream(new File("E:\\\\file/FileTest02.txt"));
int c;
while ((c=fileis.read()) != -1) {
fileos.write(c);
System.out.println(c);
}
fileis.close();
fileos.close();
System.out.println("OK"); } }
2、使用文件字符流实现
1 package ch07;
2
3 import java.io.FileReader;
4 import java.io.FileWriter;
5 import java.io.IOException;
6
7 public class Copy {
8 public static void main(String[] args) throws IOException{
9 //创建文件字符输入/输出流
10 FileReader in =new FileReader("E:\\workspace\\tmpfile\\farrago.doc");
11 FileWriter out=new FileWriter("E:\\workspace\\tmpfile\\outagainb.doc");
12 int c;
13 while((c=in.read())!=-1){
14 System.out.println(c);
15 out.write(c);
16 }
17 in.close();
18 out.close();
19
20
21 }
22 }
六、缓冲流
缓冲流BufferedInputStream和BufferedOutputStream类和BufferedReader和BufferedWriter类。这种流把数据从原始流成块读入或者积累到一个大数据快的时候在成批写出。BufferedOutputStream和BufferedWrite仅仅在缓冲区满或者调用flush()时候才把数据写到目的地。
构造方法:
public BufferedInputStream(InputStream in)
public BufferedInputStream(InputStream in,int size)
七、管道流
管道流可以实现线程之间的数据的直接传输。
1、管道流模型:

PipedReader/PipedInputStream实现管道的输入流,而PipedWriter和PipedOutputStream实现输出流。
2、管道流的创建:
管道流的创建是将管道输入流和管道输出流进行挂连。构造方法有下面两种方式:
1 PipedInputStream pInputStream=new PipedInputStream();
2 PipedOutputStream pOutputStream=new PipedOutputStream(pInputStream);
3 或者
4 PipedInputStream pInputStream=new PipedInputStream();
5 PipedOutputStream pOutputStream=new PipedOutputStream();
6 pInputStream.connect(pOutputStream);
7 pOutputStream.connect(pInputStream);
Java中的输入流与输出流的更多相关文章
- 详解Java中的IO输入输出流!
目录 本片要点 基本分类 发展史 文件字符流 输出的基本结构 流中的异常处理 异常处理新方式 读取的基本结构 运用输入与输出完成复制效果 文件字节流 缓冲流 字符缓冲流 装饰设计模式 转换流(适配器) ...
- 系统学习 Java IO (一)----输入流和输出流 InputStream/OutputStream
目录:系统学习 Java IO ---- 目录,概览 InputStream 是Java IO API中所有输入流的父类. 表示有序的字节流,换句话说,可以将 InputStream 中的数据作为有序 ...
- java中的输入流(Scanner),数据类型,运算符,switch,数组的用法
//java中创建包用package相当于C#的命名空间namespace,java中导入包用import相当于C#中引入命名空间usingimport java.util.*;//导入包,*代表导入 ...
- Java之字节输入流和输出流
package IODemo; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOEx ...
- java中的IO流之文件复制
O(∩_∩)O哈哈~ 1.综述 一门成熟的语言肯定具备的几个模块:IO,通信,线程,UI...... Java作为一门成熟的程序语言,其IO流是比较复杂的.上个图大家感受下: 简单分析一下,IO分为两 ...
- java中InputStream String
Java 中获取输入流时,有时候须要将输入流转成String,以便获取当中的内容 ,以下总结一下 InputStream 转成String 的方式 方法1: public String conver ...
- java中的IO流(输入流与输出流)概述与总结
Java中IO流,输入输出流概述与总结 总结的很粗糙,以后时间富裕了好好修改一下. 1:Java语言定义了许多类专门负责各种方式的输入或者输出,这些类都被放在java.io包中.其中, 所有输入流类都 ...
- Java中IO流,输入输出流概述与总结
总结的很粗糙,以后时间富裕了好好修改一下. 1:Java语言定义了许多类专门负责各种方式的输入或者输出,这些类都被放在java.io包中.其中, 所有输入流类都是抽象类InputStream(字节输入 ...
- 【转】输入/输出流 - 深入理解Java中的流 (Stream)
基于流的数据读写,太抽象了,什么叫基于流,什么是流?Hadoop是Java语言写的,所以想理解好Hadoop的Streaming Data Access,还得从Java流机制入手.流机制也是JAVA及 ...
随机推荐
- MySQL数据库基础(1)数据库基础
目录 一.数据库简介 二.mysql数据库 三.客户端连接mysql服务 四.Navicat for mysql 一.数据库简介 1.概念 (1)数据:如文字.图形.图像.声音以及学生的档案记录等,这 ...
- mysql语句3-插入、修改删除表
二.DML数据操纵语句 关键字:insert(插入) delete(删除) update(更新) select(查询) 1.表创建好以后,就可以插入记录了,语法如下: 方法一 :insert i ...
- k8s env、configmap、secret外部数据加载配置
K8s提供了多种外部数据注入容器的方式,今天我们主要学习环境变量.ConfigMap以及Secret的使用和配置. 环境变量 在docker项目中,对一个容器添加环境变量可以在容器创建时通过-e EN ...
- VM搭建Hadoop环境遇到的问题
原文链接:https://www.toutiao.com/i6482644128860471822/ 一.Slave2中sshd服务一直处于启动失败状态 查看配置文件 c 发现配置文件末尾slave2 ...
- Servlet全局信息共享域对象ServletContext
注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6512672630875619853/ 1.<Servlet简单实现开发部署过程> 2.<Serv ...
- 无聊的周末用Java写个扫雷小游戏
周末无聊,用Java写了一个扫雷程序,说起来,这个应该是在学校的时候,写会比较好玩,毕竟自己实现一个小游戏,还是比较好玩的.说实话,扫雷程序里面核心的东西,只有点击的时候,去触发更新数据这一步. Sw ...
- 使用.NET 6开发TodoList应用(26)——实现Configuration和Option的强类型绑定
系列导航及源代码 使用.NET 6开发TodoList应用文章索引 需求 在上一篇文章使用.NET 6开发TodoList应用(25)--实现RefreshToken中,我们通过使用Configura ...
- Java加减乘除计算器实现
加减乘除计算机的实现 public static void main(String[] args) { while(true) { System.out.println("依次输入要计算的2 ...
- fidder无法下载证书的最佳解决办法
为什么有的小伙伴安装fidder不好使,手机无法下载证书? 1.安装一定要去官网安装! 一定要去官网安装! 一定要去官网安装!官方网址:https://www.telerik.com/download ...
- golang中自定义实现0当做除数的错误异常处理接口
package main import "fmt" type ZeroDivisor struct { // 定义一个0当做除数的结构体 divisor int // 被除数 di ...