IO输入输出流

本文介绍了Java中的IO流,包括输入流和输出流的概念,字节流与字符流的区别,以及它们的抽象基类和常用方法。详细讲解了InputStream、OutputStream、Reader和Writer的子类,如FileInputStream和FileOutputStream,以及它们的基本操作,如读写数据和关闭流。还提供了一个综合案例作为示例。
摘要由CSDN通过智能技术生成

io流主要分为 :输入流和输出流,字节流、字符流、缓冲流、转换流、对象流、打印流。
                         输入和输出:基准是内存
                         数据进入内存:就叫输入
                         输出写出内存:就叫输出


 IO流分类:
按照“流”的数据流向,可以将其化分为:输入流和输出流。

按照“流”中处理数据的单位,可以将其区分为:字节流和字符流。在java中,字节是占1个Byte,即8位;而字符是占2个Byte,即16位。而且,需要注意的是,java的字节是有符号类型,而字符是无符号类型!

字节流的抽象基类:

  InputStream,OutputStream

字符流的抽象基类:

  Reader,Writer

由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀,如InputStream的子类FileInputStream,Reader的子类FileReader。

1.字节和字符流

  字节输入流(InputStream):
常用方法:
int read();//读取一个字节的数据,如果没有数据则返回-1
int read(byte[] b);//将读入的数据存入byte数组,返回读取的长度,如果没有数据则回-1
void close();//关闭流,释放资源
 

字节输出流(OutputStream):
 常用方法:
 void write(int i);//写出一个字节的数据
 void write(byte[] b);//把byte数组中的数据写出去
 void write(byte[] b,int offset,int len);//把byte数组中从offset位置开始,长度是len数据写出去
 void flush();//刷新,清空缓存区 
 void close();//关闭流,释放资源

 字符输入流(Reader):
常用方法:
 int read();//读取一个字符的数据,如果没有数据则返回-1
 int read(char[] ch);//读取数据存入char数组,返回读取的长度,如果没有数据则返回-1
 void close();//关闭流,释放资源


字符输出流(Writer):
 常用方法:
  void write(int i);//写出一个字符的数据
  void write(char[] ch);//写出char数组中的全部数据
  void write(char[] ch,int offset,int len);//写出char数组中,从offset开始到len长的数据
  void flush();//刷新,清空缓存区 
  void close();//关闭流,释放资源

InputStream

InputStream字节输入流
InputStream类是字节输入流的抽象类,是所有字节输入流的父类,InputStream类具有层次结构如下图所示:

 FileInputStream

 FileInputStream:文件字节输入流
构造方法摘要

FileInputStream(File file):通过打开与实际文件的连接创建一个 FileInputStream ,该文件由文件系统中的 File对象 file命名。

FileInputStream(FileDescriptor fdObj):创建 FileInputStream通过使用文件描述符 fdObj ,其表示在文件系统中的现有连接到一个实际的文件。

FileInputStream(String name):通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名。
 

综合案例


public class day5 {
    public static void main(String[] args) throws IOException {
 
        // 1.定义源文件和目标文件的File对象
        File f1 = new File("D:/a.jpg");
        File newFile = new File("D:/aa/newFile.jpg");
 
        // 2.定义输入输出流关联文件
        InputStream in = new FileInputStream(f1);
        OutputStream out = new FileOutputStream(newFile);
 
        // 3.使用输入流读取内容,然后把读取的内容写入目标文件
 
//        // 3.(方法1)逐个进行读写操作
//            int n;
//            while ( (n = in.read() ) !=-1 ){
//                out.write(n);
//            }
//
//        // 3.(方法2)使用缓冲区读写
//            byte[] buffer = new byte[10];
//            while ( (n = in.read(buffer)) !=-1  ){
//                out.write(buffer,0,n);
//            }
 
        // 3.(方法3)
            long start = System.currentTimeMillis();
            // 推荐写法
            byte[] buffer = new byte[1024];
            int n ;
            while ( (n = in.read(buffer)) !=-1  ){
                out.write(buffer,0,n);
            }
            long stop = System.currentTimeMillis();
 
            System.out.println("耗时:"+(stop-start));
 
 
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值