浅谈JAVA 内存流的实现
2020-04-06 12:06
1691 查看
掌握内存操作流
输入和输出都是从文件中来的,当然,也可将输出的位置设置在内存上,这就需要ByteArrayInputStream和ByteArrayOutputStream
ByteArrayInputStream:将内容写入到内存中,
ByteArrayOutputStream:将内存中数据输出
此时的操作应该以内存为操作点。
利用此类 完成一些功能。
常用方法
ByteArrayInputStream :是InputStream子类。
public class ByteArrayInputStream extends InputStream
构造方法:
ByteArrayInputStream(byte[] buf) //创建一个 ByteArrayInputStream,使用 buf 作为其缓冲区数组。
接收一个byte数组,实际上内存的输入就是在构造方法上将数据传递到内存之中。
ByteArrayOutputStream:是OutputStream子类
输出就是从内存中写出数据。
public class ByteArrayOutputStream extends OutputStream
构造方法:
ByteArrayOutputStream() 创建一个新的 byte 数组输出流。
主要方法:
void write(int b) 将指定的字节写入此 byte 数组输出流。
利用他们,完成一个大小写字母转换顺序的程序。
重温一下这个方法:getBytes();定义如下:返回的是一个byte类型的数组。
public byte[] getBytes() { return StringCoding.encode(value, 0, value.length); }
1,
int size() 返回缓冲区的当前大小
2,
byte[] toByteArray() 创建一个新分配的 byte 数组。
3,
String toString() 使用平台默认的字符集,通过解码字节将缓冲区内容转换为字符串。
利用他们,完成一个大小写字母转换顺序的程序。
String类的大小写转换方法:
String toLowerCase() 使用默认语言环境的规则将此 String 中的所有字符都转换为小写。
转大写:
String toUpperCase() 使用默认语言环境的规则将此 String 中的所有字符都转换为大写。
如果要想把一个大写边小写,则可以通过包装类,字符的包装类是Character。
static char toLowerCase(char ch) 使用取自 UnicodeData 文件的大小写映射信息将字符参数转换为小写。
代码实例:
注意,跟文件读取不一样,不要设置文件路径。
package 类集; import java.io.* ; public class ByteArrayDemo01{ public static void main(String args[]){ String str = "HELLOWORLD" ; // 定义一个字符串,全部由大写字母组成 ByteArrayInputStream bis = null ; // 内存输入流 ByteArrayOutputStream bos = null ; // 内存输出流 bis = new ByteArrayInputStream(str.getBytes()) ; // 向内存中输出内容,注意,没有跟文件读取一样,设置文件路径。 bos = new ByteArrayOutputStream() ; // 准备从内存ByteArrayInputStream中读取内容,注意,跟文件读取不一样,不要设置文件路径。 int temp = 0 ; while((temp=bis.read())!=-1) { char c = (char) temp ; // 读取的数字变为字符 bos.write(Character.toLowerCase(c)) ; // 将字符变为小写 } // 所有的数据就全部都在ByteArrayOutputStream中 String newStr = bos.toString() ; // 因为所有output的数据都在ByteArrayOutputStream实例对象中,所以可以取出内容,将缓冲区内容转换为字符串。 try{ bis.close() ; bos.close() ; }catch(IOException e){ e.printStackTrace() ; } System.out.println(newStr) ; } };
实际上以上操作很好体现了对象的多态。通过实例化其子类不同,完成的功能也不同,也就相当于输出的位置不同,
如果是输出文件,则使用FileXxxx类。如果是内存,则使用ByteArrayXxx。
以上就是本文的全部内容,希望对大家的学习有所帮助
您可能感兴趣的文章:
相关文章推荐
- (转)共享内存在Java中实现和应用
- 利用java内存映射文件机制实现CRC循环冗余校验
- 【Java并发编程】:并发编程中实现内存可见的两种方法比较:加锁和volatile变量
- 共享内存在java中的实现
- 浅谈 Java+FlexPaper+swfTools仿百度文库文档在线预览系统设计与实现
- 深度解析Java中volatile的内存语义实现以及运用场景
- 浅谈Java内存及内存溢出
- Java分布式内存开源实现:Hazelcast
- JAVA 实现在内存中对列表进行排序
- 怎样用bloom-filter构建一个大的内存cache(java实现)
- 【JAVA基础教程】-浅谈数组及其内存控制
- 浅谈JAVA常用分布式实现方式及优缺点
- Java三个类实现内存缓存
- 【Java并发编程】之十五:并发编程中实现内存可见的两种方法比较:加锁和volatile变量
- Java 常见内存溢出异常与代码实现
- java用Socket实现的远程桌面浏览 内存溢出问题
- 浅谈java单元格合并的实现(转载)
- 共享内存在java中的实现
- 浅谈Java之内存回收
- 浅谈java阻塞队列实现原理