一、流的概念

在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中的输入流与输出流的更多相关文章

  1. 详解Java中的IO输入输出流!

    目录 本片要点 基本分类 发展史 文件字符流 输出的基本结构 流中的异常处理 异常处理新方式 读取的基本结构 运用输入与输出完成复制效果 文件字节流 缓冲流 字符缓冲流 装饰设计模式 转换流(适配器) ...

  2. 系统学习 Java IO (一)----输入流和输出流 InputStream/OutputStream

    目录:系统学习 Java IO ---- 目录,概览 InputStream 是Java IO API中所有输入流的父类. 表示有序的字节流,换句话说,可以将 InputStream 中的数据作为有序 ...

  3. java中的输入流(Scanner),数据类型,运算符,switch,数组的用法

    //java中创建包用package相当于C#的命名空间namespace,java中导入包用import相当于C#中引入命名空间usingimport java.util.*;//导入包,*代表导入 ...

  4. Java之字节输入流和输出流

    package IODemo; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOEx ...

  5. java中的IO流之文件复制

    O(∩_∩)O哈哈~ 1.综述 一门成熟的语言肯定具备的几个模块:IO,通信,线程,UI...... Java作为一门成熟的程序语言,其IO流是比较复杂的.上个图大家感受下: 简单分析一下,IO分为两 ...

  6. java中InputStream String

    Java 中获取输入流时,有时候须要将输入流转成String,以便获取当中的内容 ,以下总结一下 InputStream 转成String 的方式  方法1: public String conver ...

  7. java中的IO流(输入流与输出流)概述与总结

    Java中IO流,输入输出流概述与总结 总结的很粗糙,以后时间富裕了好好修改一下. 1:Java语言定义了许多类专门负责各种方式的输入或者输出,这些类都被放在java.io包中.其中, 所有输入流类都 ...

  8. Java中IO流,输入输出流概述与总结

    总结的很粗糙,以后时间富裕了好好修改一下. 1:Java语言定义了许多类专门负责各种方式的输入或者输出,这些类都被放在java.io包中.其中, 所有输入流类都是抽象类InputStream(字节输入 ...

  9. 【转】输入/输出流 - 深入理解Java中的流 (Stream)

    基于流的数据读写,太抽象了,什么叫基于流,什么是流?Hadoop是Java语言写的,所以想理解好Hadoop的Streaming Data Access,还得从Java流机制入手.流机制也是JAVA及 ...

随机推荐

  1. frontend-maven-plugin插件问题解决

    1.插件介绍 frontend-maven-plugin为项目本地下载/安装Node和NPM,运行npm install命令 . 它适用于Windows,OS X和Linux. 这个插件也可以下载No ...

  2. 最详细的git使用教程

    git的安装可以参考我的博客:https://www.cnblogs.com/shanfeng1000/p/10969116.html 一.工作流程 Git 工作流程一般是: 克隆 Git 资源作为工 ...

  3. Python项目生成requirements.txt文件及pip升级问题解决及流程

    缘由:新项目使用Python, PC上的python包不全,需要通过requirements.txt文件指定安装所需包 pip安装遇到一些坑 一.直接使用pip包管理工具生成requirements. ...

  4. CSS基础-4 定位

    CSS定位和浮动 css定位:改变页面的位置 定位机制有以下三种 普通流 浮动 绝对布局 定位的属性: position:把元素放在一个静态的.相对的.绝对的.或固定的位置中 top          ...

  5. vue render中如何正确配置img的路径

    第一种:适用于静态路径 attrs: { src: require('../common/images/logo.png'), title: 'img' } 第二种:适用于动态路径 domProps: ...

  6. 计算机视觉2-> 深度学习 | anaconda+cuda+pytorch环境配置

    00 想说的 深度学习的环境我配置了两个阶段,暑假的时候在一个主攻视觉的实验室干活,闲暇时候就顺手想给自己的Ubuntu1804配置一个深度学习的环境.这会儿配到了anaconda+pytorch+c ...

  7. idea 插件推荐

    工欲善其事必先利其器,本文介绍几个自己在开发过程中常用的idea插件 安装方法 idea 里面在线安装 settings>plugins>marketplace 里面搜索安装 idea 官 ...

  8. 云计算——实验一 HDFS与MAPREDUCE操作

    1.虚拟机集群搭建部署hadoop 利用VMware.centOS-7.Xshell(secureCrt)等软件搭建集群部署hadoop 远程连接工具使用Xshell: HDFS文件操作 2.1 HD ...

  9. Message deduplication 这里的去重与你想的可能不一样|Apache Pulsar 技术系列

    导语 Apache Pulsar 是一个多租户.高性能的服务间消息传输解决方案,支持多租户.低延时.读写分离.跨地域复制.快速扩容.灵活容错等特性.腾讯云内部 Pulsar工作组对 Pulsar 做了 ...

  10. javascript 获取<td>标签内的值。

    当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model). HTML DOM 模型被构造为对象的树. 通过可编程的对象模型,JavaScript 获得了足够的能力来 ...