掌握内存操作流

输入和输出都是从文件中来的,当然,也可将输出的位置设置在内存上,这就需要ByteArrayInputStream和ByteArrayOutputStream

ByteArrayInputStream:将内容写入到内存中

ByteArrayOutputStream:将内存中数据输出

此时的操作应该以内存为操作点。

Java将内存流写入到File文件里_输出流

利用此类 完成一些功能。

常用方法

Java将内存流写入到File文件里_大小写_02

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,内存操作流的操作对象,一定是以内存为主准,不要以程序为准。

2,实际上此时可以通过向上转型的关系,为OutputStream或InputStream.

3,内存输出流在日后的开发中也是经常使用到,所以一定要重点掌握。