java 51_Java从入门到入土(51)过滤字节流一

本文介绍了Java中的FilterInputStream和FilterOutputStream类,它们用于对其他输入/输出流进行特殊处理,并提供同步机制。文章重点讲解了缓冲字节流BufferedInputStream和BufferedOutputStream的工作原理及如何提高读写效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java.io包中提供了FilterInputStream类和FilterOutputStream类分别对其他输入/输出流进行特殊处理,它们在读/写数据的同时可以对数据进行特殊处理。另外它们还提供了同步机制,使得同一时刻只有一个线程可以访问一个输入/输出流。

FilterInputStream类和FilterOutputStream类都是抽象类,因此它们均不能实例化对象。

FilterInputStream类有三个子类分别为BufferedInputStream,DataInputStream和PushbackInputStream.

FilterOutputStream类亦有三个子类分别是BufferedOutputStream,DataOutputStream和PrintStream。

FilterInputStream类和FilterOutputStream类分别重写了InputStream和OutputStream的所有方法,他们的子类亦是如此。

请参考:a413aa5a1d892476a225cf4d78836b94.png

注意:使用过滤字节流时,由于过滤流不直接与底层的数据连接,必须先指定节点流对象处理底层数据,然后把节点流对象作为过滤流对象的实参使用。如下:File f1 = new File("d:\\test.txt");

FileInputStream fileInputStream = new FileInputStream(f1);

DataInputStream dataInputStream=new DataInputStream(fileInputStream);

BufferedInputStream和BufferedOutputStream类

BufferedInputStream和BufferedOutputStream类称为缓冲字节流,他引入了针对内存缓冲区的操作,从而提高了读写效率。java中引入了缓冲流,使缓冲流在应用程序和外部设备之间增加了一个内存缓冲区,当一个缓冲字节流对象和一个节点流相连接时,读写数据的操作不再是和外部设备直接打交道,而是先把这些数据放在内存缓冲区,等到缓冲区存满后再一并把缓冲区的数据输入或输出到指定设备。

如下为构造方法:543ef7c12e011f97d6cbf7e3f1f90d17.png

82eedb8a1e55f962bbe2df5387ad6a77.png

举一个复制文件的简单例子:import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.FileInputStream;

import java.io.FileOutputStream;

public class helloworld {

// 此方法可以对文件进行复制

public static void main(String[] args) {

// 对流进行声明

FileInputStream fins = null;

FileOutputStream fouts = null;

BufferedInputStream bins = null;

BufferedOutputStream bouts = null;

// try-catch进行异常处理

try {

// 使用节点流FileInputStream对象连接缓冲输入流BufferedInputStream

// 并指定缓冲区为1024

fins = new FileInputStream("d://test.txt");

bins = new BufferedInputStream(fins, 1024);

// 使用节点流FileOutputStream对象连接缓冲输出流BufferedOutputStream

fouts = new FileOutputStream("d://test2.txt");

bouts = new BufferedOutputStream(fouts, 1024);

// 声明字节数组,用作暂时存放数据的容器

byte[] buff = new byte[1024];

// 一次输入输出的长度标识

int len = 0;

// 循环读取输入流,循环内部直接使用输出流输出

while ((len = bins.read(buff)) != -1) {

bouts.write(buff, 0, len);

}

System.out.println("复制文件成功");

} catch (Exception e) {

e.printStackTrace();

System.out.println("复制文件失败");

} finally {

// 关闭文件流

try {

bins.close();

fins.close();

bouts.close();

fouts.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

}

如上代码使用缓冲字节流进行了文件的复制操作,详细代码解释请参考文中注释。

51javacms是款纯ajax的mvc架构cms;摒弃了传统的ssh的java企业级架构的庞大和臃肿;代码简洁,功能简单实用,安装键式;站内搜索是使用lucene3.3的技术;真正的开源;真正的免费;非常适合互联网中小型网站的应用。 51JAVACMS是款基于JAVA**台研发的内容管理系统,依托JAVA的高效、安全、稳定等优势,并且汲取了php的简洁和方便,开创国内JAVA版开源CMS之先河。 这个系统没有去做**志;审核;复杂权限等企业级的功能;主要想的是为中小型互联网站服务;那些复杂臃肿的功能;留给别人去2次开发。不然的话;会严重影响51javacms的推广和应用; 我个人认为java在互联网的应用为何没有php那么受欢迎,主要是技术人员过分追求复杂的技术架构和逻辑功能去了;搞得草根都不敢去用java了(怕别人说技术不专业);这样的结果是严重阻碍了java在互联网的应用和推广。而php在互联网的成功在于简单务实(织梦php的cms成功就是这个原因)。我们的理念:大道至简;做款简单实用的java版本的开源cms。 51JAVACMS是51JAVA版网站管理系统(51Java Content Manage System)的简称。 1. 基于java技术开发,继承其强大、稳定、安全、高效、跨**台等多方面的优点 2. 采用MVC AJAX简洁的技术架构 3.懂html就能建站,提供最便利、合理的使用方式 4.强大、灵活的标签,用户自定义显示内容和显示方式 5.在设计上自身预先做了搜索引擎优化,增强对搜索引擎的友好性 6.完全生成全站静态页面,全面提高页面访问速度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值