IO中其他流--节点流
来源:互联网 发布:足迹美图软件 编辑:程序博客网 时间:2024/06/05 13:28
节点流
1、字节数组节点流
输入流:ByteArrayInputStream read(byte[] b,int off,int len) + close()
输出流:ByteArrayOutputStream write(byte[] b,int off,int len) + toByteArray()(父类没有的新方法,不要使用多态)
import java.io.BufferedInputStream;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;/** * 字节数组节点流 * 数组的长度有限,数据量不会很大 */public class ByteArrayStream { public static void main(String[] args) throws IOException { read(write("传入字符")); } /** * 输入流操作与文件输入流操作一致 * 读取字节数组 * @throws IOException */ public static void read(byte[] src) throws IOException{ //数据源(模拟其它电脑上的内存)// String msg = "输入流操作与文件输入流操作一致";// byte[] src = msg.getBytes(); //数据源改为传入 //选择流 InputStream is = new BufferedInputStream( new ByteArrayInputStream( src ) ); //操作 byte[] flush = new byte[1024]; int len = 0; while(-1 != (len=is.read(flush))){ System.out.println(new String(flush,0,len)); } //释放资源,可以不调用 is.close(); } /** * 输出流操作与文件输出流有些不同,有新增方法,不能使用多态 * @throws IOException */ public static byte[] write(String msg) throws IOException{ //目的地 byte[] des; //选择流 与文件输出流的一个不同点:没有传入参数 ByteArrayOutputStream baos = new ByteArrayOutputStream(); //操作 写出 //String msg = "输出流操作与文件输出流有些不同,有新增方法,不能使用多态"; byte[] info = msg.getBytes(); baos.write(info,0,info.length); //获取数据 des = baos.toByteArray(); //释放资源 baos.close(); return des; }}
字节数组流、与文件流对接,也就是利用节点流实现文件的拷贝
import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;/** * 1、文件 -程序->字节数组 * 文件输入流 * 字节数组输出流 * 2、字节数组 -程序->文件 * 字节数组输入流 * 文件输出流 */public class ByteArrayAndFile { public static void main(String[] args) throws IOException { byte[] data = getBytesFromFile("D:/安装包/aa/bb/a.txt");// System.out.println(new String(data)); toFileFromByteArray(data,"D:/安装包/aa/bb/c.txt"); } /** * 1、文件 -程序->字节数组 * @param srcPath * @return * @throws IOException */ public static byte[] getBytesFromFile(String srcPath) throws IOException{ //创建文件源 File src = new File(srcPath); //创建字节数组目的地 byte[] des = null; //选择流 //文件输入流 InputStream is = new BufferedInputStream(new FileInputStream(src)); //字节数组输出流 不能使用多态 ByteArrayOutputStream baos = new ByteArrayOutputStream(); //操作 不断读取文件,写出到字节数组流中 byte[] flush = new byte[1024]; int len = 0; while(-1 != (len=is.read(flush))){ //写出到字节数组流中 baos.write(flush,0,len); } baos.flush(); //获取数据,因为inputStream里面的内容你不知道具体有多长,所以无法确定到底buffer需要多长1024也许未必够用,所以只能把buffer当做缓存, //每次读进一部分,在把buffer的内容,写到足够大的内存区。如果你确定你的输入流中字节数小于1024,你也可以直接返回buffer //ByteArrayOutputStream时将数据窜存放在管道中,但是FileOutputStream将数据写入到文件中,所以需要使用这个方法将数据取出来使用 des = baos.toByteArray(); //释放资源 baos.close(); is.close(); return des; } /** * 2、字节数组 -程序->文件 */ public static void toFileFromByteArray(byte[] src,String desPath) throws IOException{ //创建源 //目的地 File des = new File(desPath); //选择流 //字节数组输入流 InputStream is = new BufferedInputStream(new ByteArrayInputStream(src)); //文件输出流 OutputStream os = new BufferedOutputStream(new FileOutputStream(des)); //操作 不断读取字节数组 byte[] flush = new byte[1024]; int len = 0; while(-1 != (len=is.read(flush))){ //写出到文件中 os.write(flush, 0, len); } os.flush(); //释放资源 is.close(); os.close(); }}
阅读全文
0 0
- IO中其他流--节点流
- IO流六:IO包中其他流对象
- IO流-其他流
- IO流-其他流
- 其他类、IO流
- 其他IO流
- IO流其他类
- 其他IO流对象
- java 自学日志【十四】---IO流中其他对象
- Java--IO流(其他流)
- IO流(五)其他流
- 黑马程序员---IO其他流
- 黑马程序员--IO其他流
- IO流之节点流
- JAVA IO系列----节点流
- [IO]——节点流
- 黑马程序员--IO(File类、Properties、IO中其他的一些常用流、字符编码)
- io(六)其他流常用流
- Linux —— /etc/profile、/etc/bashrc、.bash_profile、.bashrc理解
- mysql 删除重复数据
- 小猪浅谈Android屏幕适配
- 浮沉千古事?谁与问东流。
- Spring MVC之@RequestBody, @ResponseBody 详解
- IO中其他流--节点流
- EOFError: Ran out of input
- constexpr关键字
- 【scala 笔记(4)】 控制结构 -- 自定义控制结构
- 常用的几款抓包工具
- JSP中调用java类中的方法
- JVM调优总结 -Xms -Xmx -Xmn -Xss
- MyEclipse Servers视窗出现“Could not create the view: An unexpected exception was thrown”错误
- 监控和管理生产环境spring boot actuator