io流 和 自定义输入输出流

硅谷探秘者 2885 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基础 1565 IO是什么?其实就是Java中的一种功能,也可以理解为对文件的写的操作,只不过Java中对这种操作叫做对的操作。而不只是对文件进行读写,还可以对内存,网络,程度操作。根据数据的
java springboot 672 涉及知识点:java动态编译,java反射,io,java文件操作,向,多线程与线程安全,mysql数据库设计等,理解起来难度较高。下面是我己设计的几个问题,一些测试数据。排序问题
spring/springmvc 3102 1.springmvc执行程图:2.执行程分析1.一个url请求该站点的前端控制器DispatcherServlet。2.随后DispatcherServlet调用HandlerMapping
weblog 1564 一个插件.js(function(){ //需要向外暴露的插件对象 constMyPlugin={}; MyPlugin.install=function(Vue,options){ //1
java虚拟机(jvm) 3245 字节代码指令字节代码指令由一个标识该指令的操作码数目的参数组成:操作码是一个无符号字节值——即字节代码名,由助记符号标识。例如,操作码0用助记符号NOP表示,对应于不做任何操作的指令。参数是静
框架 551 一般分页查询的接口都需要传page(当前第几页),limit(限制行数)两个参数。如果框架本身没有做处理的话我们需要己在控制层写参数去接收处理这俩参数。如何配置基础框架,让其动接收处理这些
java虚拟机(jvm) 3130 类加载器类加载器虚拟机设计团队把类加载阶段中的“通过一个类的全限名来获取描述此类的二进制字节”这个动作放到Java虚拟机外部去实现,以便让应用程序己决如何去获取所需要的类。实现这个动作的代码
official 32 什么是网络协议?网络协议就是为计算机网络中进行数据交换而建立的规则、标准或约的集合。有了网络协议才能实现不同设备、不同操作系统、不同软件之间的数据交换。我们常说的tcp协议udp协议其实是操作系
归档
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
标签
算法基础 linux 前端 c++ 数据结构 框架 数据库 计算机基础 储备知识 java基础 ASM 其他 深入理解java虚拟机 nginx git 消息中间件 搜索 maven redis docker dubbo vue 导入导出 软件使用 idea插件 协议
目录
祝愿神州十三飞行乘组平安归来