掌握内存操作流

输入和输出都是从文件中来的,当然,也可将输出的位置设置在内存上,这就需要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。

最新文章

  1. tableView优化性能
  2. android View事件分发机制结论
  3. BFS 或 同余模定理(poj 1426)
  4. DIV+CSS圆角边框
  5. vi显示行号
  6. 读《CSCW的一种建模与实现方法》
  7. python_eval的用法
  8. OpenStack运维(三):OpenStack存储节点和配置管理
  9. windows下安装和配置nginx
  10. MongoDB 最大连接数 设置失效的异常分析
  11. composer 出现You are running Composer with SSL/TLS protection disabled.
  12. T-SQL :联接查询练习 (杂)
  13. jQuery中empty与html("")的区别对比
  14. python filter函数应用,过滤字符串
  15. go语言学习--protobuf的学习
  16. 使用Hexo + Github Pages搭建个人独立博客
  17. NOI 2015 Bless All!
  18. Leetcode 22
  19. 构建Maven项目自动下载jar包
  20. solr特点九:word(分词)

热门文章

  1. linux更改用户名,域名(转载)
  2. PCB 合拼遍历(全排序+旋转90度) 基本遍历方法
  3. Ruby Encoding类
  4. Ruby 数式匹配器
  5. HDU1175:连连看(搜索)
  6. bzoj 3784: 树上的路径【点分治+st表+堆】
  7. 洛谷P1552 [APIO2012]派遣(左偏树)
  8. VS2013程序打包报 ISEXP : error -****: An error occurred streaming
  9. 利用爬虫将Yuan先生的博客文章爬取下来
  10. 配置Ubuntu16.04第03步:安装搜狗输入法