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及 ...
随机推荐
- 开一场自己的特斯拉灯光秀「GitHub 热点速览 v.22.01」
作者:HelloGitHub-小鱼干 新的一年开始了,本周特推是两款有意思的游戏,一个是末日生存游戏,让你有"危机感"地过好新的一年,而另外一款则是编程游戏,有代码就有一切的一款游 ...
- windows下的pycharm下载与安装(不包括激活)
Pycharm的下载与安装 首先兄弟们我们依旧在浏览器输入pycharm的网址链接 PyCharm: the Python IDE for Professional Developers by Jet ...
- 初识python: 集合
集合是一个无序的,不重复的数据组合.主要作用如下:1.去重,把一个列表变成集合,会自动去重:2.关系测试,测试两组数据之前的交集.差集.并集等关系 #!/user/bin env python # a ...
- 第10组 Alpha冲刺 (4/6)
1.1基本情况 ·队名:今晚不睡觉 ·组长博客:https://www.cnblogs.com/cpandbb/p/13982696.html ·作业博客:https://edu.cnblogs.co ...
- 输出前 n 个Fibonacci数
本题要求编写程序,输出菲波那契(Fibonacci)数列的前N项,每行输出5个,题目保证输出结果在长整型范围内.Fibonacci数列就是满足任一项数字是前两项的和(最开始两项均定义为1)的数列,例如 ...
- 2022 跳槽涨薪必不可少面试通关宝典 —— css 篇
生于忧患死于安乐!已经居家隔离 23 天了,解封以后估计就得找工作了,提前准备起来!需要的赶紧收藏起来 一.谈谈你对 BFC 的理解及作用. BFC 是 Block Formatting Contex ...
- leetcode 51. N皇后 及 52.N皇后 II
51. N皇后 问题描述 n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回所有不同的 n 皇后 ...
- 611. Valid Triangle Number
Given an array consists of non-negative integers, your task is to count the number of triplets chose ...
- echarts x轴的纵向区域随便点击获取点击的x轴那一纵向区域的值
1.现在xAxis里面配置一下: 2.在生成图表的后面加入框起来的部分 myChart.getZr().on('click', function (params) { /* 通过获取echarts上面 ...
- Kindle连接移动的 Wi-Fi 时要求进行网页浏览器登陆怎么办?
在电脑上新建一个新文件,名为"WIFI_NO_NET_PROBE",同时把后缀名删掉,让它变成一个无格式文件.Kindle 连接电脑,把新建的文件放进Kindle的根目录,断开Ki ...