IO流分类详细介绍和各种字节流类介绍与使用 过滤流 字节流
Java中流的实现是在java.io包中定义类的层次结构的。
字节流:以字节(8位二进制)为单位进行处理。主要用于读写诸如图像或声音的二进制数据。
字符流:以字符(16位二进制)为单位进行处理。
都是通过字节流的方式实现的。字符流是对字节流进行了封装,方便操作。在最底层,所有的输入输出都是字节形式的。
节点流:从特定的地方读写的流类,如磁盘或者一块内存区域。
过滤流:使用节点流作为输入或输出。过滤流是使用一个已经存在的输入流或者输出流连接创建的。
这里使用InputStream的子类FileInputStream读入文件:
public static void main(String[] args) throws IOException {
//创建文件输入流
InputStream is = new FileInputStream("D:/itzhai/arthinking.txt");
//创建字节缓冲
byte[] buffer = new byte[100];
int length = 0;
//以字节形式循环读取文件
while((length = is.read(buffer, 0, buffer.length)) != -1){
//把字节转换成字符并输出
String str =new String(buffer, 0, length);
System.out.println(str);
}
}

把字节数组作为源的输入流。
字节数组输入流:
public static void main(String[] args) {
//创建读取数据源
String input = "arthinking";
//获取字节数组
byte[] b = input.getBytes();
//创建字节数组输出流
ByteArrayInputStream bis = new ByteArrayInputStream(b);
//循环逐个读取
for(int i = 0; i < input.length(); i++){
int c;
//读取下一个字节
while((c = bis.read()) != -1){
System.out.print((char)c);
}
}
//将缓冲区的位置重置为标记位置
bis.reset();
}
字节数组输出流:
public static void main(String[] args) throws IOException {
//创建字节输出流
ByteArrayOutputStream bos = new ByteArrayOutputStream();
String output = "arthinking";
//创建需要输出的字节数组
byte[] buffer = output.getBytes();
//把字节数组写到输出流
bos.write(buffer);
//创建文件输出流
OutputStream os = new FileOutputStream("D:/itzhai/arthinking.txt");
//把字节输出流写到文件输出流
bos.writeTo(os);
}
由此可以看出,只有最后一个方法才是抽象的,原因是前面两个都调用了第三个抽象方法,这样继承这个抽象类的子类都必须提供抽象的write(int b)的实现,从而使得每个子类的实现都不一样。
这里使用了OutputStream的子类FileOutputStream输出到文件:
public static void main(String[] args) throws IOException {
//创建一个输出流
OutputStream os = new FileOutputStream("D:/itzhai/arthinking.txt", true);
String output = "http://www.itzhai.com";
//从字符串中获取字节数组
byte[] buffer = output.getBytes();
//写出到输出流
os.write(buffer);
//关闭输出流
os.close();
}

过滤流不能直接跟文件打交道,只能通过节点流进行相关的操作。可以从其构造方法中看出:
FilterOutputStream(OutputStream out)
需要传入一个OutputStream。
在InputStream和OutputStream的子类中,FilterInputStream和FilterOutputStream是过滤流,其又派生出子类DataInputStream和DataOutputStream数据输入流和数据输出流。
过滤流的主要特点是在输入输出数据同时对所传输的数据做指定类型或格式的转换。
该类实现缓冲的输出流。通过设置这种输出流,应用程序就可以将各个字节写入底层输出流中,而不必针对每次字节写入调用底层系统。
当缓冲区写满或者关闭输出流时,一次性输出到流,或者调用flush()方法主动将缓冲区输出到流。
使用过滤流类BufferedOutputStream和DataOutputStream装饰FilterOutputStream的例子:
public static void main(String[] args) throws IOException {
//创建数据输出流
DataOutputStream dos = new DataOutputStream(
new BufferedOutputStream(new FileOutputStream("D:/itzhai/arthinking.txt")));
byte a = 1;
char b = 'a';
int c = 2;
//使用数据输出流对象的方法写出数据到输出流
dos.write(a);
dos.write(b);
dos.write(c);
//关闭数据输出流
dos.close();
//创建数据输入流
DataInputStream dis = new DataInputStream(
new BufferedInputStream(new FileInputStream("D:/itzhai/arthinking.txt")));
//使用数据输入流的方法从输入流中读取数据
System.out.println(dis.readByte() + dis.readChar() + dis.readInt());
//关闭数据输入流
dis.close();
}
使用DataInputStream和DataOutputStream数据文件流的一般步骤:
FileInputStream --> BufferedInputStream --> DataInputStream --> 数据
数据 --> DataOutputStream --> BufferedOutputStream --> FileOutputStream
IO流分类详细介绍和各种字节流类介绍与使用 过滤流 字节流的更多相关文章
- Unity3D核心类介绍
脚本介绍与Unity核心类介绍 -------------------------------------------------------------------------------- 脚本介 ...
- -1-4 java io java流 常用流 分类 File类 文件 字节流 字符流 缓冲流 内存操作流 合并序列流
File类 •文件和目录路径名的抽象表示形式 构造方法 •public File(String pathname) •public File(String parent,Stringchild) ...
- 第八节:详细讲解Java中的异常处理情况与I/O流的介绍以及类集合框架
前言 大家好,给大家带来详细讲解Java中的异常处理情况与I/O流的介绍以及类集合框架的概述,希望你们喜欢 JAVA 异常 try...catch...finally结构的使用方法 class Tes ...
- Java基础系列8——IO流超详细总结
该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 在初学Java时,I ...
- Java——IO流超详细总结
该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 在初学Java时,I ...
- Java中IO软件包的详细介绍
一.Java Io流 Java Io流的概念 java的io是实现输入和输出的基础,可以方便的实现数据的输入和输出操作.在java中把不同的输入/输出源(键盘,文件,网络连接等)抽象表述为" ...
- Java中IO流中所涉及到的各类方法介绍
IO流之字节流 (1)IO用于在设备间进行数据传输的操作 (2)分类: A:流向 输入流 读取数据 输出流 写出数据 B:数据类型 字节流 字节输入流 字节输出流 字符流 字符输入流 字符输出流 注意 ...
- java io 流分类表
Java输入/输出流体系中常用的流分类(表内容来自java疯狂讲义) 注:下表中带下划线的是抽象类,不能创建对象.粗体部分是节点流,其他就是常用的处理流. 流分类 使用分类 字节输入流 字节输出流 字 ...
- Java IO流体系中常用的流分类
Java输入/输出流体系中常用的流分类(表内容来自java疯狂讲义) 注:下表中带下划线的是抽象类,不能创建对象.粗体部分是节点流,其他就是常用的处理流. 流分类 使用分类 字节输入流 字节输出流 字 ...
随机推荐
- HDU1159(LCS)
#include<iostream> #include<algorithm> #include<cstring> #include<cstdio> us ...
- poj 1236 Network of Schools : 求需要添加多少条边成为强连通图 tarjan O(E)
/** problem: http://poj.org/problem?id=1236 缩点后入度为0的点的总数为需要发放软件的学校个数 缩点后出度为0的点的总数和入度为0的点的总数的最大值为需要增加 ...
- DRF知识
- Linux的开山篇
一.Linux的学习方向 1.2Linux运维工程师 1.2.2Linux嵌入式开发工程师 1.2.3在Linux下做各种程序开发 javaEE 大数据 Python PHP C/ ...
- Kubernetes中的Ingress
Ingress是什么 Ingress :简单理解就是个规则定义:比如说某个域名对应某个 service,即当某个域名的请求进来时转发给某个 service;这个规则将与 Ingress Control ...
- java简单web爬虫(网页图片)
java简单web爬虫(网页图片)效果,执行main()方法后图片就下载道C盘的res文件夹中.没有的话创建一个文件夹代码里的常量根据自己的需求修改,代码附到下面. package com.sinit ...
- 右键添加git-bash
主要: 右键如果没有git-bash,如何给右键手动添加 前面对右键存在git-bash但使用出现问题的解决,也想到如果右键都没有,该如何给右键添加了,于是接着记录下如何添加的过程: 情形: 手动给右 ...
- YII2 多MongoDB配置和使用
1:在config/web.php 文件下配置多个连接即可: 注意在componets 下 'mongodb' => [ 'class' => '\yii\mongodb\Connecti ...
- Spark 推送数据至 elasticsearch
1.工程依赖 <properties> <spark_version>2.3.1</spark_version> <!-- elasticsearch--&g ...
- zabbix监控nginx服务状态
nginx需要安装--with-http_stub_status_module模块 $ nginx -V nginx version: nginx/1.12.2 built by gcc 4.8.5 ...