java输入流转成输出流,[转]java 输出流转输入流
ByteArrayOutputStream.toByteArray
ByteArrayInputStream
StringWriter.toString
StringReader
字符流和二进制流是javaIO的两类流,
输入流和输出流是javaIO的两类流
如果你曾经使用过Java IO 编程,很可能会遇到这样一个状况,在一个类中向OutputStream里面写数据,而另一个类则从InputStream中读取这些数据。这时问题就出 现了,“如何才能把OutputStream里的数据转换为InputStream里的数据呢?”。
在Java里,并没有一个OutpStreamToInputStreamConverter 的类。 但庆幸的是还是有几个方法可以办到。
方法1:使用byte数组作为缓存
最简单的方法就是使用byte 数组作为缓存。代码示例如下:
ByteArrayOutputStream out = new ByteArrayOutputStream();
class1.putDataOnOutputStream(out);
class2.processDataFromInputStream(
new ByteArrayInputStream(out.toByteArray())
);
这样就行了,OutputStream已经转换为InputStream。
方法2:使用管道
方法1的问题是你必须有足够大的缓存来保存所有的数据。很可能就需要使用文件系统而不是内存,但是不论哪种方法都对能处理的数据存规模存在严格的限制。解 决的方法是在一个线程中往PipedOutputStream里面写数据,而当前线程则继续读另一个线程输入的数据。
PipedInputStream in = new PipedInputStream();
PipedOUtputStream out = new PipedOutputStream(in);
new Thread(
new Runnable(){
public void run(){
class1.putDataOnOutputStream(out);
}
}
).start();
class2.processDataFromInputStream(in);
方法3:使用循环缓存
方法2里面的两个管道实际上是维护了一个隐藏的循环缓存。所以明确的使用一个循环缓存可以更加简便。循环缓存提供了如下几种好处:
(译者注:JDK中并没有提供这种解决方案,感兴趣的话可以去http://ostermiller.org/utils/ 下载)
一个循环缓存类替代两个管道类
可以很容易的在“缓存所有数据”和“多线程”方法间切换
你可以改变缓存的大小,而不是依赖于管道内硬编码的1k的缓存
多线程使用循环缓存的示例如下:
CircularByteBuffer cbb = new CircularByteBuffer();
new Thread(
new Runnable(){
public void run(){
class1.putDataOnOutputStream(cbb.getOutputStream());
}
}
).start();
class2.processDataFromInputStream(cbb.getInputStream());
单线程循环缓存示例如下:
// buffer all data in a circular buffer of infinite size
CircularByteBuffer cbb = new CircularByteBuffer(CircularByteBuffer.INFINITE_SIZE);
class1.putDataOnOutputStream(cbb.getOutputStream());
class2.processDataFromInputStream(cbb.getInputStream());
Writer到Reader 的转换方法与上述方法类似,下面仅举例,不做详细说明了。
方法4:使用缓存数组
StringWriter out = new StringWriter();
class1.putDataOnWriter(out);
class2.processDataFromReader(
new StringReader(out.toString())
);
方法5:使用管道
PipedReader in = new PipedReader();
PipedWriter out = new PipedWriter(in);
new Thread(
new Runnable(){
public void run(){
class1.putDataOnWriter(out);
}
}
).start();
class2.processDataFromReader(in);
方法6:使用循环缓存
多线程示例
CircularCharBuffer ccb = new CircularCharBuffer();
new Thread(
new Runnable(){
public void run(){
class1.putDataOnWriter(ccb.getWriter());
}
}
).start();
class2.processDataFromReader(ccb.getReader());
单线程示例
// buffer all data in a circular buffer of infinite size
CircularCharBuffer ccb = new CircularCharBuffer(CircularCharBuffer.INFINITE_SIZE);
class1.putDataOnWriter(ccb.getWriter());
class2.processDataFromReader(ccb.getReader());
JAVA输出流与输入流
输出流 编程入门的第一个程序,输出一串字符串 public class C { public static void main(String[] args) { System.out.println( ...
【转】JAVA输出内容打印到TXT以及不同系统中如何换行
JAVA输出内容打印到TXT以及不同系统中如何换行 http://xiyang.09.blog.163.com/blog/static/59827615201172552755293/ 2011-08 ...
java输出双引号
java输出双引号 直接看例子 //输出双引号 public class Test { public static void main(String[] args) { System.out.prin ...
java输出一个目录下的子目录
java输出一个目录下的子目录 package com.vfsd.core; import java.io.File; public class ListDir { public static voi ...
[Java] Steam文件输入流
package test.stream; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...
java输出重定向
Java的标准输入,输出分别是通过System.in和System.out来代表.默认情况下他们分别代表键盘和显示器. System类里提供了3个重定向标准输入,输出的方法. static void ...
系统学习 Java IO (一)----输入流和输出流 InputStream/OutputStream
目录:系统学习 Java IO ---- 目录,概览 InputStream 是Java IO API中所有输入流的父类. 表示有序的字节流,换句话说,可以将 InputStream 中的数据作为有序 ...
Day_14【IO流】扩展案例2_缓冲字符输出、输入流进行用户名的创建
需求分析 1.项目根目录下建立文件: user.txt,文件中存放用户名和登录密码,格式:用户名,密码,如:aaa,123: 2.user.txt文件中初始存放的用户信息有如下: jack,123 r ...
PHP、Java输出json格式数据
PHP 输出json. $result = mysql_query($sql); //查询结果 $users=array(); $i=0; while($row=mysql_fetch_array ...
随机推荐
Freemarker与Springmvc
1.导入springmvc和freemarker的jar包 2.web.xml中配置Spring和Springmvc <?xml version="1.0" encoding ...
D:Wordpress_AFC插件常用代码
获取自定义变量 //输出自定义字段title的值<?php the_field('title','options'); ?> //获取自定义字段title的值 <?php echo ...
html(单纯html标签)
html是超文本标记语言, 不是编程语言. 单标签:
..hr(水平线).input, 双标签:h1~h6,p,a,div,head,body,title,s ...
总结XX网app中webapp常见的前端错误。
在2016年12月至2017年1月,这一个月的时间内,我参与了易政网app中webapp前端项目的工作,下面将我在此次项目中犯的错误总结起来,以防下次再犯.也终于知道之前看的文章中的一段话所代表的意义 ...
演示 Calendar 的一般操作
package com.yixin.webbrower; /* * 演示 Calendar 的一般操作 */ import java.util.Date; import java.text.Simpl ...
jvm内存溢出问题
Java内存溢出详解 一.常见的Java内存溢出有以下三种: 1. java.lang.OutOfMemoryError: Java heap space ----JVM Heap(堆)溢出 J ...
scrapy instantiation
start from scrapy.cmdline import execute execute(['scrapy', 'crawl', 'jokespider']) items.py import ...
通过JavaScript自由切换iframe
我发现我有很大的强迫症,如果看到别人的文章没有最终的效果图,我会毫不犹豫关掉这个页面.真的很炸毛这种,让我有很不舒服的体验:所以纵使网上有类似的了,我还是写一篇给那些跟我有同样症状的人阅读. 首先来学 ...
使用DataTables插件与后台对接表格
function getResults(){ var callResults = $.ajax({ url: "....", //接口url type: "GET&quo ...
微信小程序7 - 页面命名规范
/pages/{module}/{page}/index.js 这个是目录结构 所有单个页面(Page)目录内, 都叫做index,如 index.js index.wxss ,不需要起其他名 ...
java输入流转成输出流,[转]java 输出流转输入流相关推荐
- Java 输入一个正整数的字符串,输出与它最接近的对称数字(不包括它自己)的字符串
题目描述: 输入一个正整数的字符串,输出与它最接近的对称数字(不包括它自己)的字符串 注1: 输入字符串的长度最多不会超过18 注2: 当大于输入数字和小于输入数字的对称数字与输入数字距离相同时,取小 ...
- java 程序打包成jar_把Java程序打包成jar文件包并执行的方法
本文介绍了把Java程序打包成jar文件包并执行的方法,分享给大家,具体如下: 1.首先要确认自己写的程序有没有报错. 2.第一次我写的是Web Project到现在,我一直没有执行成功,所以最好创建 ...
- java输入一个字符串_在java中如何用键盘输入一个数,字符,字符串
一,利用 Scanner 实现从键盘读入integer或float 型数据 1 import java.util.*;2 public classtest {3 public static voidm ...
- java输入字符串并将每个字符输出
import java.util.Scanner; public class Main{public static void main(String[] args){int i,len;String ...
- java输入最大10位数,倒数输出(很鸡肋)
public class D { public static void main(String[] args) { System.out.println("请输入数字(最大十位数):&quo ...
- java输入日期计算天数_(JAVA)输入年月日,计算日期是今年的第几天?
展开全部 import java.util.Scanner; /** * Created by xpf on 2018/6/22 :) * GitHub:xinpengfei520 * Functio ...
- java 168转换成861_java实验-java语言面向对象编程基础
java实验-java语言面向对象编程基础 (12页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 8.90 积分 广州大学学生实验报告广州大学学生实验报告 ...
- java强制转换成float_在Java中什么时候double必须强制转换成float 就是要在数值后加f或者强制转换...
满意答案 auyps 2013.08.05 采纳率:47% 等级:12 已帮助:8409人 好吧,我也来说说double与float之间的转换 首先,我说一下定义时赋值的情况 比如: 你可以这样 ...
- java float转换成long_在Java中如何将float转换为long或int数据类型?
float f=1.2f;double d=Double.parseDouble(String.valueOf(f));System.out.println(d);直接转换会设计到精度问题,所以需要借 ...
最新文章
- 电压放大倍数公式运放_【专题2:电子工程师 之 硬件】 之 【43.运算放大器详解e 运算放大器虚短和虚断】...
- 分布式任务队列 Celery — Overview
- Python3 turtle教程
- sap可配置BOM的主要流程
- 高并发 python socket send 异步_对于Python中socket.listen()与多线程结合的困惑?
- Vuex新手的理解与使用
- Arm v8 中断处理
- JSF2.0与纯JS框架
- win7重装系统后设置Python2.7环境
- XML文档注释(C#)
- 使用Spring Boot自动发布和监视API
- 徐扬:互联网营销下的移动营销
- 2018年网络规划设计师上午真题及答案解析
- DOM4J介绍与代码示例【转载】
- StudyTonight 中文系列教程【翻译完成】
- HCK哈士奇x可口可乐联名潮酷冰吧,你还没入手吗?
- 《中国新能源汽车舆情报告2021》发布 |特斯拉“车顶维权”占据年度十大舆情事件之首...
- 迎向阳光,ACCUSYS世仰 确定2021首届年度色
- 《哲学100问》读书感想:为什么要做一个道德的人
- 微软edge浏览器不显示图片问题