IO输入输出流,输入流和输出流的基本用法,综合案例文件的复制;

1 初识Java IO

IO,即in和out,也就是输入和输出,指应用程序和外部设备之间的数据传递,常见的外部设备包括文件、管道、网络连接。

Java 中是通过流处理IO 的,那么什么是流?

流(Stream),是一个抽象的概念,是指一连串的数据(字符或字节),是以先进先出的方式发送信息的通道。

当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样。

一般来说关于流的特性有下面几点:

一:先进先出:最先写入输出流的数据最先被输入流读取到。

二:顺序存取:可以一个接一个地往流中写入一串字节,读出时也将按写入顺序读取一串字节,不能随机访问中间的数据。(RandomAccessFile除外)

三:只读或只写:每个流只能是输入流或输出流的一种,不能同时具备两个功能,输入流只能进行读操作,对输出流只能进行写操作。在一个数据传输通道中,如果既要写入数据,又要读取数据,则要分别提供两个流。

1、输入流与输出流

输入与输出是相对于应用程序而言的,比如文件读写,读取文件是输入流,写文件是输出流,这点很容易搞反。

字节输入输出流:

字节流用于处理二进制数据的读取和写入,它以字节为单位,InputStream类和OutputStream类是字节流的抽象类,它们定义了数据流读取和写入的基本方法。各个子类会根据其特点实现或覆盖这些方法。

1、字节数入流抽象类InputStream

InputStream 类是字节输入流的抽象类,定义了操作输入流的各种方法,这些方法如下:

返回方法说明intavailable()返回当前输入流的数据读取方法可以读取的有效字节数量

Abstract intread()从当前数据流中读取一个字节。若已达到流结尾,则返回-1

intread(byte[ ] bytes)从当前输入流读取一定的byte数据,并存取在数组中,然后返回读取的byte数据的数量,若已到达流结尾,则返回-1。

voidreset()将当前的输入流重新定位到最后一次调用mark()方法时的位置

voidmark(int readlimit)在当前输入流中做标记位置,当调用reset()方法时将返回到该位置,从标记位置开始,到再读入readlimit个字符为止,这个标记都维持有效。

BooleanmarkSupported()测试当前输入流是否支持mark()和reset()方法,只要其中一个不支持,则返回false

longskip(long n)跳过和丢弃当前输入的n个字节数据\n\nvoidclose()关闭当前输入流,并释放任何与之相关联的系统资源

InputStream 类是抽象类,不能通过new关键字来创建该实例对象,需要其子类创建该实例对象。
2、字节输出流抽象类OutputStream类

OutputStream定义了输出流的各种方法,如下表:

返回方法说明voidwrite(byte[ ] b)将byte[ ] 数组中的数据写入当前输出流

voidwrite(byte[] b ,int off, int len)将byte[ ]数组下标off开始的len长度的数据写入当前输出流

Abstract voidwrite(int b)写入一个byte数据到当前输出流\n\nvoidflush()刷新当前输出流,并强制写入所有缓冲的字节数据

voidclose()关闭当前输出流

和InputStream类一样,OutputStream 类是抽象类,不能通过new关键字来创建该实例对象,需要其子类创建该实例对象。
文件的复制:

代码如下:

package com.huanxiao.test07;

import java.io.*;

public class CopyFileTest {
    public static void main(String[] args) throws IOException {
        //1.定义源文件和目标文件的File对象
        File f1=new File("D:/oo/来自爱你的一个表白.txt");
        File newFile=new File("D:/aa/newFile.txt");

        //2.定义输出流关联文件
        InputStream in=new FileInputStream(f1);
        OutputStream out=new FileOutputStream(newFile);

//        //3.使用输入流读取内容,然后把读取的内容写入目标文件中
//        int n;
//         while ((n=in.read())!=-1) {
//              out.write(n);
//             }
//          byte[] b=new byte[10];
//          while (true){
//              int n=in.read();
//              if(n!=-1){
//                  out.write(b,0,n);
//              }else {
//                  break;
//              }
//          }
   byte[] buffer=new byte[1024];
   int n;
   while ((n=in.read(buffer))!=-1){
       out.write(buffer,0,n);
   }

    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值