Java SE 091 节点流、过滤流深入详解

(1)一个人只要自己不放弃自己,整个世界也不会放弃你.
(2)天生我才必有大用
(3)不能忍受学习之苦就一定要忍受生活之苦,这是多么痛苦而深刻的领悟.
(4)做难事必有所得
(5)精神乃真正的刀锋
(6)战胜对手有两次,第一次在内心中.
(7)编写实属不易,若喜欢或者对你有帮助记得点赞+关注或者收藏哦~

Java SE 091 节点流、过滤流深入详解

1.节点流过滤流

在这里插入图片描述

FilterInputStream以及它的子类是过滤流,其余的是节点流。

2.OutputStream

在这里插入图片描述

package com.javareview.io.stream;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

/**
 * 数据由程序流向文件
 * @author x_xiongjie
 *(1)对于文件输出流,如果有文件,就可以直接往文件里面写入内容。
 *(2)如果没有文件,就新建一个文件,然后将内容写到新建的文件里面去。
 *(3)若不想每次在写入文件内容时后写入的文件内容将前面写入的文件内容覆盖掉,则可在构建文件输出流时将追加方式设置为true.即在构造方法中加入将追加设置为true。
 */
public class OutputStreamTest1 {
	public static void main(String[] args) throws IOException {
		OutputStream os = new FileOutputStream(new File("d:/test.txt"),true);
		String str = "Xiong Jie and Liu Manlin will get married!";
		byte[] buffer = str.getBytes();
		os.write(buffer);
		os.close();
	}
}

3.输出流写数据的逻辑

在这里插入图片描述

4.过滤流

在这里插入图片描述
在这里插入图片描述

5.BufferedOutputStream(缓冲输出流)

在这里插入图片描述

(1)BufferedInputStream与BufferedOutputStream都是过滤流,即它们不能直接与文件打交道。它们是与一个节点流打交道的。

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
/**
 * 缓冲流不会直接的去写到文件里面,而是写到内存的缓冲区,缓冲区什么时候会将内存中的数据写入目标呢?
 * 有两种方式:
 * 1、flush()方法:清空绥中的输出流,强制的使得任何的缓冲输出字节,都会被写到底层的输出流里面,本例中它底层的输出流就是
 * FileOutputStream,写到它里边儿去之后,它就会写到文件里面去。
 * 2、close()方法,在关闭流之前,会先将缓冲区里面的东西清空,即调用一下flush()方法,然后再将数据写到目标。
 * @author x_xiongjie
 *
 */
public class BufferedOutputStreamTest1 {
	public static void main(String[] args) throws Exception {
		OutputStream os = new FileOutputStream("d:/te.txt");
		BufferedOutputStream bos = new BufferedOutputStream(os);
		bos.write("Xiong Jie and Liu Manlin will get married!".getBytes());
		bos.close();
		os.close();
	}
}

6.ByteArrayInputStream(字节数组输入流)

在这里插入图片描述
在这里插入图片描述

import java.io.ByteArrayInputStream;
/**
 * 字节数组输入流
 */
public class ByteArrayInputStreamTest {
	public static void main(String[] args) {
		String str = "Xiong Jie and Liu Manlin will get married!";
		byte[] buffer = str.getBytes();
		ByteArrayInputStream bis = new ByteArrayInputStream(buffer);
		ByteArrayInputStream bis2 = new ByteArrayInputStream(buffer, 0, 25);
		for(int i = 0 ; i < str.length(); i++){
			int c ;
			while(-1!=(c = bis.read())){
				if(0 == i){
					System.out.println((char) c);
				}else{
					System.out.println(Character.toUpperCase((char)c));
				}
			}
			System.out.println();
			//重新定位流到这个位置上,上一次对这个流调用mark方法的那个位置。
			bis.reset();
		}
	}
}

7. ByteArrayOutputStream字节数组输出流

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值