课堂笔记--字节流及相关补充

来源:互联网 发布:b2b行业网站源码 编辑:程序博客网 时间:2024/05/16 05:26
 

字节流

抽象基类InputStream(字节输入流)、OutputStream(字节输出流):

字节流使用的是字节数组,字符流使用的是字符数组,但字节流可以操作任何数据。

InputStream和OutputStream都是抽象类,不能实例化,因此在实际应用中并不使用这两个类,而是使用另外的一些基本数据流类(都为InputStream和OutputStream的子类)。

 

字节输出流类的使用代码实例:

import java.io.*;

public class DemoFileInputOutput {

    public static void main(String[] args) throws IOException {

       // TODO Auto-generated method stub

       int n=12;

       byte arr[]={65,66,67,68};

       //File输出流    FileOutputStream

       FileOutputStream fos=new FileOutputStream("res/data.txt");

       fos.write(n);

       fos.write(arr);

       fos.write(arr, 1,2);

       fos.flush();

       fos.close();

    }

}

 

实例:编写程序copy一个图片

import java.io.*;

public class CopyImageDemo {

    public static void main(String[] args){

       //复制---从源文件中读取数据,写入到目标文件

       //输入流----FileInputSream  BufferedInputStream   

//输出流--FileOutputStream BufferedOutputStream

       FileInputStream fis=null;

       FileOutputStream fos=null;

       BufferedInputStream bis=null;

       BufferedOutputStream bos=null;

       try {

           fis=new FileInputStream("res/0.gif");

           bis=new BufferedInputStream(fis);

           fos=new FileOutputStream("res/1.gif");

           bos=new BufferedOutputStream(fos);

           int n=0;

           while((n=bis.read())!=-1){

              bos.write(n);

           }

          

       } catch (FileNotFoundException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       } catch (IOException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }finally{

           if(bis!=null){

              try {

                  bis.close();

              } catch (IOException e) {

                  // TODO Auto-generated catch block

                  e.printStackTrace();

              }

           }

           if(bos!=null){

              try {

                  bos.close();

              } catch (IOException e) {

                  // TODO Auto-generated catch block

                  e.printStackTrace();

              }

           }

       }

    }

}

转换流(了解即可)

在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在一组字节流—字符流的转换流

OutputStreamWriter:是Writer的子类,将输出的字符流变为字节流,即:将一个字符流的输出对象变为字节流的输出对象。InputStreamReader:是Reader的子类,将输入的字节流变为字符流,即:将一个字节流的输入对象变为字符流的输入对象。

实例:

import java.io.*;

public class DemoConvertStream {

    public static void main(String[] args) throws IOException {

       // TODO Auto-generated method stub

       //把字符数据写出到磁盘文件

       //输出流---转换流OutputStreamWriter---字节流对象做参数FileOutputStream

      

       FileOutputStream fos=new FileOutputStream("res/demo.txt");

       OutputStreamWriter osw=new OutputStreamWriter(fos,"UTF-8");

      

       osw.write("hello");

       osw.write("中国");

       osw.flush();

       osw.close();

      

       FileInputStream fis=new FileInputStream("res/demo.txt");

 

       InputStreamReader isw=new InputStreamReader(fis,"UTF-8");

       char cbuf[]=new char[10];

       int len=isw.read(cbuf);

      

       System.out.println(new String(cbuf,0,len));

    }

 

}

标准输入/输出流

标准输入System.in
System.in作为字节输入流类InputStream的对象,实现标准的输入,使用其read()方法从键盘接收数据。

public int read() throws IOException  

public int read(byte[] i) throws IOException

标准的输出System.out
System.out是打印流类PrintStream的对象,用来实现标准输出。print()和println()方法,支持任意的基本类型作为参数。

public void print(参数)

public void println(参数)

 

原创粉丝点击