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及 ...
随机推荐
- Java初学者作业——编写 Java 程序,定义 Employee 类以及 HR 类,实现 HR 为 Employee 加薪的功能。
返回本章节 返回作业目录 需求说明: 编写 Java 程序,定义 Employee 类以及 HR 类,实现 HR 为 Employee 加薪的功能. 实现思路: 定义 Employee 类,并定义属性 ...
- hisql 新功能 支持一套sql在不同数据库执行
目前流行的ORM框架如果需要动态的拼接查询语句,只能用原生的sql进行拼接,无法跨不同数据库执行.hisql推出新的语法一套语句可以在不同的数据库执行 传统ORM框架最大的弊端就是完全要依赖于实体用l ...
- Redis_客户端命令和数据操作(3)
更多命令请查找:http://c.biancheng.net/redis_command/ 切换数据库 redis数据库没有名称,默认有16个,通过0-15来标识,连接redis默认选择第一个数据库, ...
- Visual Studio Code快速补全html标签(Sublime同样支持)
1.生成html文件骨架 输入"!" 或 "html:5",按tab键 注意:编写中文网页,记得把头部语言<html lang="en" ...
- vue 前进刷新后退不刷新
这边是router-view部门的写法: <keep-alive> <router-view v-if="$route.meta.keepAlive"/> ...
- 数组内sizeof与strlen的区别
1.数组在内存中是连续存放的,地址呈4个字节递增 2.数组的定义需要初始化,否则输出会已随机值输出 3.strlen()和sizeof()之间无关联:strlen():是求字符串长度的----只能针对 ...
- golang中的数组
1. 数组的声明 package main import "fmt" func main() { // 数组:定长且元素类型一致的数据集合 // 方式一:先声明在赋值,声明时内存中 ...
- WPS修改批注部分的字体颜色?
今天遇到一个问题,就是复制文档的时候有几块红色字体想改成黑色,怎么也改不成功,通过修改字体颜色无效,通过百度找到了解决方法记录一下. 解决方法 审阅--显示标记--点击插入和删除(去掉前面的对钩即可) ...
- Web播放器
web视频播放器的使用及遇到的问题记录 TcPlayer播放器(腾讯Web超级播放器) https://cloud.tencent.com/document/product/881/20207 Ste ...
- 初步学习TypeScript
使用Visual Studio Code搭建TypeScript开发环境 1.TypeScript是干什么的 ? TypeScript是由微软Anders Hejlsberg(安德斯·海尔斯伯格,也是 ...