Java字节流

Java字节流

字节流:InputStream、OutputStream

·字符流:Reader、Writer

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

·确定操作文件的路径

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

·进行输入、输出操作

·关闭流

2.1字节输出流:OutputStream

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

public abstract class OutputStream
extends Object
implements 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 InputStream
extends Object
implements 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值