zoukankan      html  css  js  c++  java
  • IO流-输入输出的简单实例

    InputStream和OutputStream

    抽象类InputStream和OutputStream是IO流最底层的两个抽象类,所有输入/输出流的类都基于这两个类.

    这两个类里最核心的三个方法是read()和write(),以及close()

    read() : InputStream类里的方法, 负责读取内容到输入流

    write() : OutputStream类里的方法, 负责将内容输出.

    close() : 两个类里都有这个方法, 负责关闭流,先关闭输入流,再关闭输出流

    read()有3个重载方法,分别是:

    public abstract int read() throws IOException : 每次读取1字节,以int形式返回这一字节的数据内容,全部读取完成时返回-1表示读取完毕

    public int read(byte b[]) throws IOException : 读取数据到传入的byte数组中,返回读取的字节数,全部读取完毕时返回-1,该方法相当于read(b[], 0, b.length)

    public int read(byte b[], int off, int len) throws IOException : off:表示从数组中的第几位开始存储数据 len:表示数组中使用的字节数. b[].length= off+len+剩余的字节数 ,返回值等同于read(byte b[])

    ***一个byte类型变量是1个字节,所以new byte[1024]是1KB(1024字节),1个英文字母或数字对应1字节容量***

    FileInputStream和FileOutputStream的实例

    	@Test
    	public void test() {
    		//新建一个byte数组用来存储读到的数据,大小是1KB(1024字节)
    		byte[] oneByte = new byte[1024];
    		try {
    			//创建输入和输出流
    			FileInputStream inStream = new FileInputStream("C:/test/aaa.txt");
    			FileOutputStream outStream = new FileOutputStream("C:/test/bbb.txt");
    			//循环读取(read)aaa.txt文件的内容到oneByte,并输出到bbb.txt
    			//当文件读取完成时(返回-1),结束循环
    			while (inStream.read(oneByte) != -1) {
    				//把刚读到的内容输出到bbb.txt
    				outStream.write(oneByte);
    			}
    			//最后一定记得关闭输入输出流,先输入,在输出
    			inStream.close();
    			outStream.close();
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}

    注意:

    1.如果文件体积小于byte数组(),输出时仍将完整的输出byte数组中的数据,包括未赋值的null,看下图

    文件体积6字节,byte数组容量调整为8字节.

         

    2.如果文件体积大于byte数组,但最后一次读取的数据体积小于byte数组,这将造成一些问题,因为byte数组在赋值前并未被清空,所以byte数组中仍会保留一部分上次循环中存储的数据.看下图

    文件体积6字节,把byte数组容量调成5字节,可以看到,byte数组中未被覆盖的数据(上次循环时的数据)在第二次循环中被输出(红框部分)

         

    使用public int read(byte b[], int off, int len) throws IOException

     还是上边的代码,read(byte b[])改成用read(byte b[], int off, int len)方法,其他不变,罗列情况如下

    1.文件体积6字节,byte数组容量8字节,read(b[], 0, 8)

        

    2.文件体积6字节,byte数组容量8字节,read(b[], 1, 6)

        

    3.文件体积6字节,byte数组容量8字节,read(b[], 1, 8)

    数组下标越界,因为1+8>b[].length

  • 相关阅读:
    1691: [Usaco2007 Dec]挑剔的美食家
    poj2892 Tunnel Warfare
    P3369 【模板】普通平衡树 Treap
    Splay的用法
    P3165 [CQOI2014]排序机械臂
    P2286 [HNOI2004]宠物收养场
    P3391 【模板】文艺平衡树(Splay)新板子
    3224: Tyvj 1728 普通平衡树(新板子)
    P2515 [HAOI2010]软件安装
    CF 219 D:Choosing Capital for Treeland(树形dp)
  • 原文地址:https://www.cnblogs.com/jinyu59/p/10747991.html
Copyright © 2011-2022 走看看