Java I/O系统

输入和输出

InputStream类型

数据源包括:字节数组,字符串对象,管道,其他流的序列,Internet链接

功能
ByteArrayInputStream将内存的缓冲区转换InputStream
StringBufferInputStream将String对象转换为InputStream
FileInputStream将文件转换为InputStream
FilterInputStream抽象类,作为装饰器,为其他InputStream类提供额外功能

OutputStream类型

接收端包括:字节数组,文件,管道

功能
ByteArrayOutputStream将流的数据存放在缓冲区
FileOutputStream将数据写入文件
FilterOutputStream抽象类,作为装饰器,为其他OutputStream类提供额外功能

装饰器

FilterInputStream类型
功能
DataInputStream可从流读取基本数据类型
BufferedInputStream使用缓冲区,避免每次读取进行实际写操作
FilterOutputStream类型
功能
DataOutputStream将流的数据存放在缓冲区
BufferedOutputStream使用缓冲区,避免每次发送数据进行实际写操作
PrintStream用于产生格式化输出

Reader和Writer

InputStream和OutputStream面向字节,Reader和Writer面向字符
FileInputStream → FileReader
FileOutputStream → FileWriter

BufferedInputStream → BufferedReader
BufferedOutputStream → BufferedWriter

I/O流的典型使用方式

输入

文件缓冲字符输入
	BufferedReader in = new BufferedReader(new FileReader("D:\\temp\\demo.txt"));
    String s;
    while( (s = in.readLine()) != null){
        System.out.println(s);
    }
    in.close();
从内存输入
	StringReader reader = new StringReader("我在学Java");
    int read;
    while((read = reader.read()) != -1){
        System.out.print((char)read);
    }
    reader.close();

输出

基本的文件输出
	BufferedReader in = new BufferedReader(new FileReader("D:\\demo.txt"));
    PrintWriter out = new PrintWriter(new BufferedWriter(newFileWriter("D:\\demo2.txt")));
    StringBuffer stringBuffer = new StringBuffer();
    String s;
    while( (s = in.readLine()) != null){
        out.println(s);
    }
    in.close();
    out.close();

新I/O

jdk1.4引入了新的I/O类库,并且旧的I/O包已经使用新I/O实现过,充分利用速度的提高。
新I/O速度的提高来自于所用的结构接近操作系统执行I/O的方式:通道和缓冲器。通道是FileChannel,缓冲器是ByteBuffer。旧类的FileInputStream和FileOutputStream可以产生FileChannel。

	//写
	FileChannel channel = new RandomAccessFile("D:\\IDEA\\aaa.txt","rw").getChannel();
    channel.write(ByteBuffer.wrap("aaa".getBytes()));
    channel.close();
    //读
    channel = new RandomAccessFile("D:\\IDEA\\aaa.txt","rw").getChannel();
    ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
    channel.read(byteBuffer);
    byteBuffer.flip();
    while(byteBuffer.hasRemaining()){
        System.out.print((char)byteBuffer.get());
    }
    channel.close();

压缩

Java I/O类库支持读写Zip和GZip格式的数据流,并且是按字节方式处理的。

GZIP

	BufferedReader in = new BufferedReader(new FileReader("d:\\demo.txt"));
    BufferedOutputStream out = new BufferedOutputStream(
            new GZIPOutputStream(
                    new FileOutputStream("d:\\test.gz")));
    String s;
    while((s=in.readLine()) != null){
        out.write(s.getBytes(Charset.defaultCharset()));
    }
    in.close();
    out.close();

ZIP

	CheckedOutputStream csum = new CheckedOutputStream(
            new FileOutputStream("d:\\test.zip"), new Adler32());
    ZipOutputStream zos = new ZipOutputStream(csum);
    BufferedOutputStream out = new BufferedOutputStream(zos);
    String[] args = new String[]{"d:\\余君.txt","d:\\新文件 5.txt"};
    //压缩多个文件
    for(String arg : args){
        BufferedReader reader = new BufferedReader(new FileReader(arg));
        String[] split = arg.split("\\\\");
        zos.putNextEntry(new ZipEntry(split[split.length-1]));
        String s;
        while((s=reader.readLine()) != null){
            out.write(s.getBytes(Charset.defaultCharset()));
        }
        reader.close();
        out.flush();
    }
    out.close();

对象序列化

对象序列化将那些实现了Serializable接口的对象转换成一个字节序列,并能够在以后将这个字节序列完全恢复为原来的对象。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值