Java学习日记番外篇:IO流

声明:这篇文章主要内容大部分都是从林信良的Java学习日记这本书中摘录下来,仅作为个人学习参考用

IO流的一个小例子:

package com.io;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class StreamIO 
{
    public static void dump(InputStream src, OutputStream dest) //这里是数据的来源(inputstream)以及数据的目的地(OutputStream)。
            throws IOException//在这里不进行处理异常,抛给客户端处理异常
    {
        InputStream input = src;
        OutputStream output = dest;


        byte[] data = new byte[1024];//尝试每次从数据来源读取1024字节
        int length=-1;
        while((length = input.read(data))!=-1)//只要读到的数据不为空
        {
            output.write(data,0,length);
            //每次从InputStream读入的数据,都会先存入byte的数组中,InputStream的read()方法每次都会尝试读取byte数组长度的数据
            //并且返回实际读入的字节
            //可以使用output的write()方法,指定要写出byte数组,初始索引,数据长度。
            //这个dump()方法的来源和目的地都不知道
        }
    }

}

这个类可以将某个文档读入并且存为另一个文档:例如:

package com.io;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class StreamCopy 
{
    public static void main(String []args) throws IOException
    {
        StreamIO.dump(new FileInputStream(args[0]),new FileOutputStream(args[1]));
    }

}

这个程序可以由命令行自变量指定读取的文档来源以及写出的目的地:例如:

Java com.io.StreamCopy  c:\workspace\Main.java C:\workspace\Main.txt

如果要从HTTP服务器读取某个网页,并且另存为文档,也可以使用dump方法:

package com.io;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URL;

public class Download 
{
    public static void main(String []args) throws IOException
    {
        URL url=new URL(args[0]);
        InputStream src = url.openStream();
        OutputStream dest = new FileOutputStream(args[1]);
        StreamIO.dump(src, dest);
    }

}

串流继承架构

串流继承架构

标准输入输出:

将刚才的下载例子改成标准输出:

URL url1=new URL(args[0]);
InputStream is = url.openStream();
StreamIO.dump(is, System.out);

FileInputStream和FileOutputStream

都是InputStream和OutputStream的子类,可以用来读取数据和写出数据。
不使用的时候记得要用close()关闭文档。

  • FileInputStream主要用父类的read()方法,可以从文档中读取数据;
  • FileOutputStream主要用父类的write()方法,可以写出数据至文档。

这两个类在读取、写入文档时,是以字节为单位。

ByteArraynputStream和ByteArrayOutputStream

在上面的第一个例子就写到了。

串流处理打包(装饰)器:

串流处理打包器

BufferedInputStream和BufferedOutputStream

InputStream和OutputStream在读写的时候都是直接将数据写入硬盘中,这样效率会比较低。
而BufferedInputStream和BufferedOutputStream则会先将足够的数据存到内存的缓冲区,如果缓冲区中有需要的数据就直接从缓冲区读取,效率就会高一些。

这两个类操作上和InputStream和OutputStream并没有太大差别。

e.g.将第一个例子改写:

package com.io;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class BufferedIO 
{
    public static void dump(InputStream src, OutputStream dest) 
            throws IOException 
    {
InputStream input = new BufferedInputStream(src);
        OutputStream output = new BufferedOutputStream(dest);       

        byte[] data = new byte[1024]; 
        int length=-1;
        while((length = input.read(data))!=-1) 
        {
            output.write(data,0,length);
        }
    }

}

DataInputStream和DataOutputStream

在读写int/double/boolean等的数据时,这个会自动在指定的类型与字节之间转换。

dios

ObjectInputStream和ObjectOutputStream

字符处理类:

Reader和Writer:

rw

字符处理装饰器:

InputStreamReader和OutputStreamWriter

BufferedReader和BufferedWriter
带缓冲。。。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值