浅谈JAVA 内存流的实现
掌握内存操作流
输入和输出都是从文件中来的,当然,也可将输出的位置设置在内存上,这就需要ByteArrayInputStream和ByteArrayOutputStream
ByteArrayInputStream:将内容写入到内存中,
ByteArrayOutputStream:将内存中数据输出
此时的操作应该以内存为操作点。
利用此类完成一些功能。
常用方法
ByteArrayInputStream:是InputStream子类。
publicclassByteArrayInputStreamextendsInputStream
构造方法:
ByteArrayInputStream(byte[]buf) //创建一个ByteArrayInputStream,使用buf作为其缓冲区数组。
接收一个byte数组,实际上内存的输入就是在构造方法上将数据传递到内存之中。
ByteArrayOutputStream:是OutputStream子类
输出就是从内存中写出数据。
publicclassByteArrayOutputStreamextendsOutputStream
构造方法:
ByteArrayOutputStream() 创建一个新的byte数组输出流。
主要方法:
voidwrite(intb) 将指定的字节写入此byte数组输出流。
利用他们,完成一个大小写字母转换顺序的程序。
重温一下这个方法:getBytes();定义如下:返回的是一个byte类型的数组。
publicbyte[]getBytes(){ returnStringCoding.encode(value,0,value.length); }
1,
intsize() 返回缓冲区的当前大小
2,
byte[]toByteArray() 创建一个新分配的byte数组。
3,
StringtoString() 使用平台默认的字符集,通过解码字节将缓冲区内容转换为字符串。
利用他们,完成一个大小写字母转换顺序的程序。
String类的大小写转换方法:
StringtoLowerCase() 使用默认语言环境的规则将此String中的所有字符都转换为小写。
转大写:
StringtoUpperCase() 使用默认语言环境的规则将此String中的所有字符都转换为大写。
如果要想把一个大写边小写,则可以通过包装类,字符的包装类是Character。
staticchartoLowerCase(charch) 使用取自UnicodeData文件的大小写映射信息将字符参数转换为小写。
代码实例:
注意,跟文件读取不一样,不要设置文件路径。
package类集; importjava.io.*; publicclassByteArrayDemo01{ publicstaticvoidmain(Stringargs[]){ Stringstr="HELLOWORLD";//定义一个字符串,全部由大写字母组成 ByteArrayInputStreambis=null;//内存输入流 ByteArrayOutputStreambos=null;//内存输出流 bis=newByteArrayInputStream(str.getBytes());//向内存中输出内容,注意,没有跟文件读取一样,设置文件路径。 bos=newByteArrayOutputStream();//准备从内存ByteArrayInputStream中读取内容,注意,跟文件读取不一样,不要设置文件路径。 inttemp=0;while((temp=bis.read())!=-1){charc=(char)temp;//读取的数字变为字符bos.write(Character.toLowerCase(c));//将字符变为小写}//所有的数据就全部都在ByteArrayOutputStream中StringnewStr=bos.toString();//因为所有output的数据都在ByteArrayOutputStream实例对象中,所以可以取出内容,将缓冲区内容转换为字符串。 try{bis.close();bos.close();}catch(IOExceptione){e.printStackTrace();}System.out.println(newStr);}};
实际上以上操作很好体现了对象的多态。通过实例化其子类不同,完成的功能也不同,也就相当于输出的位置不同,
如果是输出文件,则使用FileXxxx类。如果是内存,则使用ByteArrayXxx。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。