字节流与转换流讲解

来源:互联网 发布:双11淘宝每年销售额 编辑:程序博客网 时间:2024/06/02 02:06

今天讲解的是字节流InputStream和OutputStream的操作,还有转换流InputStreamReader和OutputStreamWriter。和它们之间的关系。还有讲解了标准输入流System.in 。

一、   字节流:主要对于图片,声音,视频等文件的操作。字节可以操作任何数据。

a)     FileInputStream 构造方法接受文件名。与前面讲解相同 。特有的方法 abavilable()获取关联的文件的字节数  使用Byte字节的来操作。这有一个弊端,就是文件过大,大小超出jvm的内容空间时,会内存溢出。

完成图片的复制操作

BufferedInputStreambufis = new BufferedInputStream(new FileInputStream("1.jpg"));//有缓冲区,实例化以个图片

BufferedOutputStreambufos = new BufferedOutputStream(new FileOutputStream("2.jpg"));

int by = 0;

while((by=bufis.read())!=-1){   读取字节

       bufos.write(by);     将字节写入第二个文件里    

}

         B)FileOutputStream与输入流差不多,同理。

二、标准输入流 System.in

      标准的输入,对象是键盘。它与FileInputStream的对象差不多。可以用缓冲区接受。也可以读取。但是读取的是字节。需要用到转换流来转换才能读取到。

二、   转换流的操作。字节流----字符流相互转换的中间类

a)      OutputStreamWriter:是Writer的子类,将输出的字符变为字节流,即:将一个字符流的输出对象变为字节流的输出对象。字符到字节的桥梁

b)     InputStreamReader:是Reader的子类,将输入的字节流变为字符流,即:将一个字节流的输入对象变为字符流的输入对象。字节到字符的桥梁

c)     它们的构造方法参数为两个,是与FileWriter的不用:如OutputStreamWriter(OutputStream out,String charseName);后一个参数为编码方式

FileWriter与FileReader对象使用的是默认的编码表。如果要使用指定编码表时,必须使用转换流。

public static void main(String[] args) throwsIOException {

              //TODO Auto-generated method stub

              OutputStreamWriterosw=new OutputStreamWriter(newFileOutputStream("demo.txt"),"utf-8");  //输出转换流实例化对象以字节输入流对象为参数。编码方式为UTF-8

              osw.write("你好,世界!");  /写入

              osw.flush();     //刷新

              osw.close();   //关闭

             

              InputStreamReaderisr=new InputStreamReader(newFileInputStream("demo.txt"),"utf-8");//  读取转换流对象  编码方式如果不同则会出现乱码

              intch=0;

              while((ch=isr.read())!=-1){   //读取

                     System.out.print((char)ch);

              }

              System.out.println();

             

              char[]arr=new char[1024];

              intlen=isr.read(arr);

              System.out.println(newString(arr,0,len));  //输出读取到的数据(已转换为字符)

原创粉丝点击