Java字节流

来源:互联网 发布:开淘宝网店注册收费 编辑:程序博客网 时间:2024/05/17 03:49

Java字节流

字节流:InputStream、OutputStream

·字符流:Reader、Writer

不管使用何种流,基本的操作流程是一样的,以文件操作为例:

·确定操作文件的路径

·通过字节流或字符流的子类为字节流和字符流对象实例化

·进行输入、输出操作

·关闭流

2.1字节输出流:OutputStream

         Java.io.OutputStream是可以进行字节数据(byte)的输出,这个类的定义结构如下:

public abstract class OutputStreamextends Objectimplements Closeable, Flushable

         三个输出的write()方法:

           ·输出单个字节:public abstract void write(int b) throwsIOException

                   ·输出全部字节:public void write(byte[] b) throws IOException

                   ·输出部分字节:public void write(byte[] b,int off,int len)throwsIOException

  OutputStream是个抽象类,需要使用子类进行实例化(ByteArrayOutputStream,FileOutputStream, FilterOutputStream,ObjectOutputStream, OutputStream, PipedOutputStream),本次对文件操作,使用FileOutputStream子类。

                   构造方法:public FileOutputStream(File file) throwsFileNotFoundException,覆盖

                   构造方法:publicFileOutputStream(File file,boolean append) throws FileNotFoundException,追加

范例:文件的输出

public class OS_FileOut_test {    public static void main(String[] args) throws Exception  {       File file = new File("D:" + File.separator + "test" + File.separator              + "test.txt");       if (!file.getParentFile().exists()) {           file.getParentFile().mkdirs();       }       if (!file.exists()) {           file.createNewFile();       }       FileOutputStream fos = new FileOutputStream(file, true);//文件末尾追加//FileOutputStream fos = new FileOutputStream(file);//写入覆盖       fos.write("hello world".getBytes());//fos.write("hello world".getBytes(),0,5);//将字节数组范围输出       fos.close();    }}

 使用单个输出:

String msg="Hello World!";      for (int i = 0; i < msg.length(); i++) {         fos.write(msg.charAt(i));      }

在整个OutputStream中最重要的是输出方法:输出部分字节数据

2.2字节输入流:InputStream

     使用OutputStream可以完成程序想文件的输出,读取内容使用InputStream。

定义如下:

public abstract class InputStreamextends Objectimplements Closeable

         InputStream类依然是Closeable借口的子类,但是InputStream类本身一直存在close()方法,因此可以忽略掉Closeable。在InputStream类之中定义三个read()方法:

·读取单个字节:public abstract int read()throws IOException

                   |-每次读取一个字节数据,此时返回的数据,如果数据已经读完,则返回-1

·读取所有字节到字节数组:public int read(byte[]b) throws IOException

                   |-将内容读取到字节数组中,返回的是个数,如果读取完毕返回-1

·读取内容到部分字节数组:public int read(byte[]b,int off,int len)throws IOException

|-将指定长度的内容读取到字节数组之中,返回读取的个数,如果读取完毕返回-1

         同样的抽象类,实例化使用子类(AudioInputStream, ByteArrayInputStream, FileInputStream,FilterInputStream, InputStream, ObjectInputStream,PipedInputStream,SequenceInputStream, StringBufferInputStream),此处使用FileInputStream读取文件:

实例:整个文件读入到字符数组

File file = new File("D:" + File.separator + "test" + File.separator            + "test.txt");      if (file.exists()) {         InputStream is=new FileInputStream(file);         byte data[]=new byte[1024];         is.read(data);         System.out.println("【"+new String(data)+"】");         is.close();      }

读取部分数据,读取完毕将不再读取

is.read(data,0,20);

而在整个InputStream类中单个字节读取操作:

File file = new File("D:" + File.separator + "test" + File.separator            + "test.txt");      if (file.exists()) {         InputStream is=new FileInputStream(file);         byte data[]=new byte[1024];         int temp=0;         int foot=0;//数组的角标         while((temp=is.read())!=-1){            data[foot++]=(byte) temp;         }         System.out.println("【"+new String(data,0,foot)+"】");         is.close();      }


0 0
原创粉丝点击