黑马程序员技术交流社区

标题: 在此,贴上一段代码:ByteArrayInputStream和ByteArrayOutputStream类! [打印本页]

作者: 王卿    时间: 2011-7-22 17:30
标题: 在此,贴上一段代码:ByteArrayInputStream和ByteArrayOutputStream类!
希望对有些人有用!






    流的来源或目的地不一定是文件,也可以是内存中的一个空间,例如一个位数组。java.io.ByteArrayInputStream和java.io.ByteArrayIOutputStream类便是将位数组当作流输入来源、输出目的地的类。
     ByteArrayInputStream可以将一个数组当作流输入的来源,而ByteArrayIOutputStream则可以将一个位数组当作流输出的目的地。下面是一个关于这两个类的示例,通过这两个类将文本文件里的相应字符改变,具体作法是通过ByteArrayInputStream将此文本文件中的内容读入数组,而后指定数组索引修改元素,最后再重新将数组用ByteArrayOutputStream存回文件。
Java代码  
package ysu.hxy;  
  
import java.io.*;  
import java.util.*;  
  
public class ByteArrayStreamDemo  
{  
    public static void main(String[] args)   
    {  
        try  
        {  
            File file = new File(args[0]);  
  
            BufferedInputStream bufInputStream = new BufferedInputStream(new FileInputStream(file));  
  
            ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();  
  
            byte[] bytes = new byte[1];  
  
            //将文件内容写入位数组流  
            while(bufInputStream.read(bytes)!=-1)  
            {  
                arrayOutputStream.write(bytes);  
            }  
            arrayOutputStream.close();  
            bufInputStream.close();  
  
            //以字符方式显示位数组内容  
            bytes = arrayOutputStream.toByteArray();  
            for(int i=0;i<bytes.length;i++)  
            {  
                System.out.print((char)bytes);  
            }  
            System.out.println();  
  
            //让使用者输入位置与字符修改位数组内容  
            Scanner scanner = new Scanner(System.in);  
  
            System.out.print("请输入修改位置:");  
            int pos = scanner.nextInt();  
            System.out.println("输入修改字符");  
            //修改数组中对应的字符  
            bytes[pos-1] = (byte)scanner.next().charAt(0);  
  
            //将位数组内容存回文件  
            ByteArrayInputStream byteArrayInputStream =   
                new ByteArrayInputStream(bytes);  
            BufferedOutputStream bufOutputStream =   
                new BufferedOutputStream(new FileOutputStream(file));  
            byte[] tmp = new byte[1];  
            while(byteArrayInputStream.read(tmp)!=-1)  
                bufOutputStream.write(tmp);  
            byteArrayInputStream.close();  
            bufOutputStream.flush();  
            bufOutputStream.close();  
        }  
        catch(ArrayIndexOutOfBoundsException e)  
        {  
            System.out.println("请指定文件名称");  
        }  
        catch(IOException e)  
        {  
            e.printStackTrace();  
        }  
    }  
}  
 
运行结果:
D:\hxy>java ysu.hxy.ByteArrayStreamDemo test.txt
abcdefg
请输入修改位置:2
输入修改字符
y
再次打开test.txt时,字符串变为aycdefg.
字符在Java中使用Unicode,是两个位组长度,所以这个范例只能用于修改ASCII字符(因为Unicode的前128位与ASCII兼容)。。


PS:我们家这几天老是停电,没办法,只有到网吧,来转转!
看到一个哥们问:

ByteArrayOutputStream和ByteArrayInputStream类对应的字符串读写类分别是什么?

我不清楚,真是惭愧!   

希望大家从这段代码中可以更详细的学到ByteArrayOutputStream和ByteArrayInputStream类  的使用!

[ 本帖最后由 gdky005 于 2011-07-22  17:33 编辑 ]
作者: 匿名    时间: 2011-7-23 14:21
汗!好伤心呀!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2