原 OSGL 工具库 - IO 操作的艺术

在前面的 OSGL 工具库之编程艺术系列中我们讲述了

本文中我们将介绍如何使用 OSGL IO 工具类来处理输入输出操作.

依旧是老规矩: 用代码来写博客

首先准备测试变量:

@Ignore
public static class Base extends TestBase {

    protected static String content;
    protected static C.List<String> lines;
    protected static int lineNumber;

    @Before
    public void prepareContent() {
        lineNumber = 5 + N.randInt(10);
        lines = C.newList();
        for (int i = 0; i < lineNumber; ++i) {
            lines.add(S.random());
        }
        content = S.join(lines).by("\n").get();
    }
}

下面的测试代码可以看出如何使用 IO 库进行操作:

public static class FluentIOTest extends Base {
    @Test
    public void testReadStringIntoLines() {
        eq(lines, IO.read(content).toLines());
    }

    @Test
    public void testWriteStringIntoOutputStream() {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        IO.write(content).to(baos);
        eq(content, new String(baos.toByteArray()));
    }

    @Test
    public void testWriteByteArrayIntoOutputStream() {
        byte[] ba = {1, 2, 3};
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        IO.write(ba).to(baos);
        eq(ba, baos.toByteArray());
    }

    @Test
    public void testWriteByteArrayIntoFile() throws IOException  {
        File file = File.createTempFile("osgl", ".tmp");
        byte[] ba = {1, 2, 3};
        IO.write(ba).to(file);
        byte[] ba0 = IO.read(file).toByteArray();
        eq(ba, ba0);
    }
}

其他 IO 工具演示:

Flushable f;
IO.flush(f);

Closable c;
IO.close(c);

InputStream is;
is = IO.inputStream(); // an empty inputstream
is = IO.inputStream("ABC"); // an input stream of string "ABC"
is = IO.inputStream(new byte[]{1, 2, 3}); 
is = IO.inputStream(new File("/etc/bash.bashrc"));
is = IO.inputStream(MyClass.getResource("/app.properties"));

Reader r;
r = IO.reader(); // an empty reader
r = IO.reader("ABC");
r = IO.reader("ABC".getBytes()):
r = IO.reader(new File("/etc/bash.bashrc"));
r = IO.reader(MyClas.getResource("/app.properties"));

File tmpDir = new File("/tmp");
File tmpFoo = IO.child(tmpDir, "foo.txt"); // /tmp/foo.txt
File tmpDir2 = IO.parent(tmpFoo);
List<File> files = IO.children(tmpDir);

String s0 = IO.checksum(new File("/etc/bash.bashrc"));
String s1 = IO.checksum(IO.inputStream(new File("/etc/bash.bashrc"));

BufferedInputStream is0 = IO.buffered(myOtherInputStream);
BufferedOutputStream os0 = IO.buffered(myOtherOutputStream);
BufferedReader r0 = IO.buffered(myOtherReader);
BufferedWriter w0 = IO.buffered(myOtherWriter);

File tmpZip = IO.zip(f0, f1, ...);
File givenZipFile = ...
IO.zipInto(givenZipFile, f0, f1, ...);

特别提示, OSGL IO 库所有的操作都不会抛出 IOException 异常, 如果有 IO 异常, OSGL IO 库会抛出 UnexpectedIOException 运行时异常.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Nian糕的私人厨房

腾讯课堂 IMWeb 七天前端求职提升营 Day 5

本次的系列博文主要是针对 腾讯课堂七天前端求职提升营 课程中,所推送的面试题目及编程练习的一次汇总,期间还包括三次直播课的分享,均由腾讯导师给大家讲解,该系列博...

924
来自专栏智能算法

一个程序员怎么才算精通python

我会先给出我对精通Python的理解,然后给出一些Python中有难度的知识点。如果大家在看完我这篇回答之前,已经充分理解了我列出的各个知识点,那么,我相信你...

5139
来自专栏nummy

模板方法模式

不知道你有没有注意过,我们实现某个业务功能,在不同的对象会有不同的细节实现, 以前说过策略模式, 策略模式是将逻辑封装在一个类(提到的文章中的Duck)中,然后...

753
来自专栏北京马哥教育

两句话掌握 Python 最难知识点:元类

运维行业正在变革,推荐阅读:30万年薪Linux运维工程师成长魔法 千万不要被所谓“元类是99%的python程序员不会用到的特性”这类的说辞吓住。因为每个中国...

32511
来自专栏顶级程序员

6 个新奇的编程方式,改变你对编码的认知

源 | Reddit 译 | OSC - 周其 我时不时会发现一种编程语言的不同用法它有时候会改变我对编程的看法啊。这篇文章中,我想分享一下让我惊讶的发...

2804
来自专栏noteless

[三]JavaIO之IO体系类整体设计思路 流的概念以及四大基础分类

从数据库,从文件,从内存,从网络拿数据,你都可以叫做输入,数据写出,都可以叫做输出,这并没有什么好纠结的

1422
来自专栏怀英的自我修炼

Java漫谈11

这次我们接着聊String,这次我们聊聊String类为什么是final的。 之所以聊这个,是因为在知乎上看了一篇帖子,看完后让我对这个点有了认识,在这里跟你分...

36111
来自专栏北京马哥教育

Python面试必须要看的15个问题

引言 想找一份Python开发工作吗?那你很可能得证明自己知道如何使用Python。下面这些问题涉及了与Python相关的许多技能,问题的关注点主要是语言本身...

4169
来自专栏点滴积累

shapeless官方指南翻译写在前面

目录 前言 Shapeless简介 The Type Astronaut's Guide to Shapeless简介 总结 一、前言        在我的20...

3597
来自专栏黑泽君的专栏

名词小解

----------------------------------------------------------------------------- py...

600

扫码关注云+社区