io流 和 自定义输入输出流

硅谷探秘者 4107 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基础 2917 IO是什么?其实就是Java中的一种功能,也可以理解为对文件的写的操作,只不过Java中对这种操作叫做对的操作。而不只是对文件进行读写,还可以对内存,网络,程度操作。根据数据的
java springboot 1726 涉及知识点:java动态编译,java反射,io,java文件操作,向,多线程与线程安全,mysql数据库设计等,理解起来难度较高。下面是我己设计的几个问题,一些测试数据。排序问题
框架,springboot 1007 springboot用带的logback打印日志多环境打印生产环境到控制台文件,一天一个文件,保留30天开发环境到控制台 二、logback-spring.xml配置文件详情?xmlversion="1.
spring/springmvc 4241 1.springmvc执行程图:2.执行程分析1.一个url请求该站点的前端控制器DispatcherServlet。2.随后DispatcherServlet调用HandlerMapping
java虚拟机(jvm) 4405 字节代码指令字节代码指令由一个标识该指令的操作码数目的参数组成:操作码是一个无符号字节值——即字节代码名,由助记符号标识。例如,操作码0用助记符号NOP表示,对应于不做任何操作的指令。参数是静
框架 2022 一般分页查询的接口都需要传page(当前第几页),limit(限制行数)两个参数。如果框架本身没有做处理的话我们需要己在控制层写参数去接收处理这俩参数。如何配置基础框架,让其动接收处理这些
weblog 2523 一个插件.js(function(){ //需要向外暴露的插件对象 constMyPlugin={}; MyPlugin.install=function(Vue,options){ //1
mqtt协议 1589 ,开销很小(固长度的头部是2字节),协议交换最小化,以降低网络量。这就是为什么在介绍里说它非常适合”在物联网领域,传感器与服务器的通信,信息的收集”,要知道嵌式设备的运算能力带宽都相对薄弱
归档
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  3 2022-09  2 2022-10  2 2022-12  5 2023-01  3 2023-02  1 2023-03  4 2023-04  2 2023-06  3 2023-07  4 2023-08  1 2023-10  1 2024-02  1 2024-03  1 2024-04  1 2024-08  1
标签
算法基础 linux 前端 c++ 数据结构 框架 数据库 计算机基础 储备知识 java基础 ASM 其他 深入理解java虚拟机 nginx git 消息中间件 搜索 maven redis docker dubbo vue 导入导出 软件使用 idea插件 协议 无聊的知识 jenkins springboot mqtt协议 keepalived minio mysql ensp 网络基础 xxl-job rabbitmq haproxy srs 音视频 webrtc javascript 加密算法
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。