一、流的概念

在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. Xstart远程连接Linux图形用户界面

    目标: 在自己的Windows桌面打开Linux的firefox浏览器 工具: Windows: Xmanager的Xstart工具 Linux: xterm,firefox 说明: 使用Xstart ...

  2. GDB调试-从入门到实践

    你好,我是雨乐! 在上篇文章中,我们分析了线上coredump产生的原因,其中用到了coredump分析工具gdb,这几天一直有读者在问,能不能写一篇关于gdb调试方面的文章,今天借助此文,分享一些工 ...

  3. Calendar日期往后一天,一月等

    import java.util.Date ;       Date date=new   Date();//取时间 System.out.println(date.toString());     ...

  4. redis 主从复制实现

    Redis 主从复制的实现 安装redis 修改redis的配置文件 redis.conf ②开启daemonize yes ③Pid文件名字 ④指定端口 ⑤Log文件名字 ⑥Dump.rdb名字 在 ...

  5. Java使用poi实现Word添加水印(仅支持后缀为.docx格式)

    最近要做电子合同,客户提出为了安全性要将合同中都添加水印,这个之前在网上看到过,貌似使用POI很好加.去网上一搜发现,清一色的只有一篇文章,并且这段代码是用不了的:在文章下边的评论里也发现都说用不了, ...

  6. 使用NSSM把任意exe程序注册成Windows服务

    1.登录NSSM官网下载最新版本: http://www.nssm.cc/download 2.解压之后可以看到win32和win64位的nssm.exe,根据自己的电脑选择使用 3.拷贝一份nssm ...

  7. [Android测试] Appium的一些坑问题错误解决 与 技巧集锦

    转:https://blog.csdn.net/niubitianping/article/details/52624417 1. error: Failed to start an Appium s ...

  8. windos 安装 redis 启动闪退

    本来想在linux上安装redis的,后来觉得也没必要,主要是了解使用方法,和原理,在什么平台上安装都是大同小异的 接下来简单描述下碰到的小问题:闪退和启动失败 究其原因就是端口被占用了,但是自己并没 ...

  9. 《剑指offer》面试题14- I. 剪绳子

    问题描述 给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m.n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]...k[m] .请问 k[0]*k[1]* ...

  10. 第56篇-ProfileData与DataLayout

    某些指令需要创建某些实例,如下: 指令 对应的DataLayout._struct._tag值 _checkcast._instanceof._aastore receiver_type_data_t ...