摘要:此类中的方法在关闭此流后仍可被调用,而不会产生任何。主要的功能是从缓冲区读取字节构造函数创建一个,使用作为其缓冲区数组。缓冲区会随着数据的不断写入而自动增长。
内存操作流
ByteArrayInputStream之前的所有的流操作都是针对文件的,但是有时候只是想要实现数据间转换,此时如果我们想要创建一个文件然后再删除文件,那样显得有点麻烦,因此此时的内存操作流就显得很适合这类的操作,因为它只是在内存中存储,并不会真正的创建文件,内存操作流涉及的两个类是ByteArrayInputStream,ByteArrayOutputStream.
构造函数ByteArrayInputStream 包含一个内部缓冲区,该缓冲区包含从流中读取的字节。内部计数器跟踪 read 方法要提供的下一个字节。
关闭 ByteArrayInputStream 无效。此类中的方法在关闭此流后仍可被调用,而不会产生任何 IOException。
主要的功能是从缓冲区读取字节
常用的方法ByteArrayInputStream(byte[] buf) 创建一个 ByteArrayInputStream,使用 buf 作为其缓冲区数组。
ByteArrayInputStream(byte[] buf, int offset, int length) 创建 ByteArrayInputStream,使用 buf 作为其缓冲区数组。
实例close() 不过对这个无效,因为关闭之后仍然可以使用函数读取而不报错
int read() 从缓冲区中读取一个字节
int read(byte[] bytes) 将缓冲区中的内容读取到数组中
int read(byte[] bytes,int off,int len) 将最多 len 个数据字节从此输入流读入 byte 数组。
long skip(long n) 从此输入流中跳过 n 个输入字节。
void reset() 将此 byte 数组输出流的 count 字段重置为零,从而丢弃输出流中目前已累积的所有输出(清除缓冲区)
public class demo8 { public static void main(String args[]) { String str = "chenjiabing 陈加兵"; byte[] bytes = str.getBytes(); //创建一个数组 ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes); //使用bytes作为缓冲区数组 int temp = 0; /*第一种方法读取缓冲区中的数据,这个和文件的操作不一样,这个可以直接冲缓冲区中读取数据字节*/ while ((temp = inputStream.read()) != -1) { System.out.print((char) temp); } /*创建数组用于存储读取的内容,下面是第二种读取数据的方法*/ byte[] b = new byte[bytes.length]; try { int len = inputStream.read(b); } catch (IOException e) { e.printStackTrace(); } System.out.println(new String(b)); } }ByteArrayOutputStream
构造函数此类实现了一个输出流,其中的数据被写入一个 byte 数组。缓冲区会随着数据的不断写入而自动增长。可使用 toByteArray() 和 toString() 获取数据。
关闭 ByteArrayOutputStream 无效。此类中的方法在关闭此流后仍可被调用,而不会产生任何 IOException。
常用函数ByteArrayOutputStream() 创建一个新的 byte 数组输出流。
ByteArrayOutputStream(int size) 创建一个新的 byte 数组输出流,它具有指定大小的缓冲区容量(以字节为单位)。
实例int size() 返回缓冲区的当前大小。
byte[] toByteArray() 创建一个新分配的 byte 数组。
String toString() 将缓冲区的字节转换成字符串
void write(byte[] b, int off, int len) 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此 byte 数组输出流。
void write(int b) 将指定的字节写入此 byte 数组输出流。
public class demo8 { public static void main(String args[]) { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); String str = "chenjiabing"; try { outputStream.write(str.getBytes()); //将字符串转换成数组然后写入缓冲区 } catch (IOException e) { e.printStackTrace(); } finally { try { outputStream.close(); //这里的关闭无效 } catch (IOException e) { e.printStackTrace(); } } //将缓冲区的数据转换成字符串后输出,这里同样可以看出输出流的关闭根本不影响函数的调用 System.out.println(outputStream.size()); //输出缓冲区的大小 System.out.println(outputStream.toString()); //输出chenjiabing outputStream.reset(); //清除缓冲区的内容,如果不清零那么原先写入的数据还是存在的,但是此时我们已经不需要前面的数据了 try { outputStream.write("陈加兵".getBytes()); //继续向缓冲区写入数据 } catch (IOException e) { e.printStackTrace(); } System.out.println(outputStream.size()); //这里的一个汉字占了三个字节 System.out.println(outputStream.toString());//输出陈加兵 } }综合
下面我们结合上面的两个类将字符串转换大小写
public class demo8 { public static void main(String args[]) { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); String str = "chenjiabing"; ByteArrayInputStream inputStream = new ByteArrayInputStream(str.getBytes()); //实例化输入流 int temp = 0; while ((temp = inputStream.read()) != -1) //读取缓冲区的字节数据 { char c = (char) temp; //将整数转换成字符,ascii码的转换 outputStream.write(Character.toUpperCase(c)); //转换成大写,然后写入输出流的缓冲区中 } System.out.println(outputStream.toString()); //利用输出流输出转换后的字符串,即是去取出内存中的数据 } }参考文章
http://blog.csdn.net/yyyandro...
http://www.cnblogs.com/lich/a...
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/67121.html
摘要:再附一部分架构面试视频讲解本文已被开源项目学习笔记总结移动架构视频大厂面试真题项目实战源码收录 Java反射(一)Java反射(二)Java反射(三)Java注解Java IO(一)Java IO(二)RandomAccessFileJava NIOJava异常详解Java抽象类和接口的区别Java深拷贝和浅拷...
摘要:总结基于构建相对来说还是比较便捷的,其中注解使得代码更加简洁,本次用到注解再汇总下,有时间的话可以深入理解下其背后的原理申明让自动给程序进行必要的配置。风格的控制器提供路由信息,负责到中的具体函数的映射一般用于修饰层的组件自动导入依赖的 本文主要记录搭建RESTful API标准工程,包含比较推荐的工程结构,掌握一些基本注解,并引入Swagger 新建一个项目 通过Spring Ini...
摘要:和方法用来设置线程是否成为守护线程和判断线程是否是守护线程。守护线程依赖于创建它的线程,随它的消亡而消亡。使用提供的方法,提醒线程终止,但是否真正终止由线程自己决定。参考实战高并发程序设计多线程干货系列一多线程基础 一、如何创建多线程 1、继承Thread类 public class MyThread extends Thread { @Override public ...
摘要:学习笔记二流的概念在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成。主要功能是向文件中写入内容构造函数根据给定的对象构造一个对象。 Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来...
阅读 2270·2021-11-16 11:51
阅读 3500·2021-09-26 10:14
阅读 1787·2021-09-22 15:58
阅读 1094·2019-08-30 15:52
阅读 2011·2019-08-30 15:43
阅读 2611·2019-08-30 13:46
阅读 906·2019-08-30 13:10
阅读 1019·2019-08-29 18:32