io流 和 自定义输入输出流

硅谷探秘者 3165 0 0

        说起io流最常用的地方就是文件操作,例如从一个文件中读取内容,或者把内容输入到文件中,这些都是io流的基本操作。其实流在编程语言中是一个抽象概念,流的概念:流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。它的特性是进行数据传输。所以io流不仅仅用于文件内容的传输。

        接下来演示一下自定义输入输出流并利用流的概念复制一个字符串,将字符串s中的内容流向s2。

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class Test {
	public static void main(String[] args) throws IOException {
		String s="123456";
		StringBuilder s2=new StringBuilder();
		BufferedInputStream bis=new BufferedInputStream(new MyInputStream(s));
		BufferedOutputStream bos=new BufferedOutputStream(new MyOutputStream(s2));
		
		byte[] bytes=new byte[1024];
		int length;
		while((length=bis.read(bytes))!=-1) {
			bos.write(bytes,0,length);
		}
		bos.flush();
		bos.close();
		bis.close();
		
		System.out.println(s2);
    }
}
class MyOutputStream extends OutputStream{
	private StringBuilder bs;
	public MyOutputStream(final StringBuilder b) {
		this.bs=b;
	}
	@Override
	public void write(int b) throws IOException {
		// TODO Auto-generated method stub
		bs.append((char)b);
	}
}
class MyInputStream extends InputStream{
	private String s=null;
	private int location=0;
	private int length;
	public MyInputStream(final String s) {
		this.s=s;
		length=s.length();
	}
	@Override
	public int read() throws IOException {
		// TODO Auto-generated method stub
		if(location>=length) {
			return -1;
		}
		return s.charAt(location++);
	}
}

这样s2中的内容就是123456

猜你喜欢
java基础 1760 IO是什么?其实就是Java中的一种功能,也可以理解为对文件的写的操作,只不过Java中对这种操作叫做对的操作。而不只是对文件进行读写,还可以对内存,网络,程度操作。根据数据的
java springboot 985 涉及知识点:java动态编译,java反射,io,java文件操作,向,多线程与线程安全,mysql数据库设计等,理解起来难度较高。下面是我己设计的几个问题,一些测试数据。排序问题
spring/springmvc 3336 1.springmvc执行程图:2.执行程分析1.一个url请求该站点的前端控制器DispatcherServlet。2.随后DispatcherServlet调用HandlerMapping
java虚拟机(jvm) 3453 字节代码指令字节代码指令由一个标识该指令的操作码数目的参数组成:操作码是一个无符号字节值——即字节代码名,由助记符号标识。例如,操作码0用助记符号NOP表示,对应于不做任何操作的指令。参数是静
weblog 1795 一个插件.js(function(){ //需要向外暴露的插件对象 constMyPlugin={}; MyPlugin.install=function(Vue,options){ //1
框架 911 一般分页查询的接口都需要传page(当前第几页),limit(限制行数)两个参数。如果框架本身没有做处理的话我们需要己在控制层写参数去接收处理这俩参数。如何配置基础框架,让其动接收处理这些
mqtt协议 260 ,开销很小(固长度的头部是2字节),协议交换最小化,以降低网络量。这就是为什么在介绍里说它非常适合”在物联网领域,传感器与服务器的通信,信息的收集”,要知道嵌式设备的运算能力带宽都相对薄弱
official 144 包括以下两个部分: 源点(source)源点设备产生要传的数据,例如,从计算机的键盘汉字,计算机产生的数字比特。源点又称为源站,或信源。 发送器通常源点生成的数字比特要通过发送器编码后
归档
2018年11月  12 2018年12月  33 2019年01月  28 2019年02月  28 2019年03月  32 2019年04月  27 2019年05月  33 2019年06月  6 2019年07月  12 2019年08月  12 2019年09月  21 2019年10月  8 2019年11月  15 2019年12月  25 2020年01月  9 2020年02月  5 2020年03月  16 2020年04月  4 2020年06月  1 2020年07月  7 2020年08月  13 2020年09月  9 2020年10月  5 2020年12月  3 2021年01月  1 2021年02月  5 2021年03月  7 2021年04月  4 2021年05月  4 2021年06月  1 2021年07月  7 2021年08月  2 2021年09月  8 2021年10月  9 2021年11月  16 2021年12月  14 2022年01月  7 2022年05月  1 2022年08月  1
标签
算法基础 linux 前端 c++ 数据结构 框架 数据库 计算机基础 储备知识 java基础 ASM 其他 深入理解java虚拟机 nginx git 消息中间件 搜索 maven redis docker dubbo vue 导入导出 软件使用 idea插件 协议 无聊的知识 jenkins springboot mqtt协议 keepalived minio
目录
祝愿神州十三飞行乘组平安归来