Okio—— 更加高效易用的IO库,android开发网络编程

public void readLines(File file) throws IOException {

try (BufferedSource bufferedSource = Okio.buffer(Okio.source(file))) {

for (String line; (line = bufferedSource.readUtf8Line()) != null; ) {

System.out.println(line);

}

}

}

try-with-source是jdk1.7开始提供的语法糖,在try语句()里面的资源对象,jdk最终会自动调用它的close方法去关闭它, 即便try里有多个资源对象也是可以的,这样就不用你手动去关闭资源了。但是在android里面使用的话,会提示你要求API level最低为19才可以。

readUtf8Line()方法适用于大多数文件。对于某些用例,还可以考虑使用readUtf8LineStrict()。类似readUtf8Line(),但它要求每一行都以\n\r\n结尾。如果在这之前遇到文件结尾,它将抛出一个EOFException。它还允许设置一个字节限制来防止错误的输入。

public void readLines(File file) throws IOException {

try (BufferedSource source = Okio.buffer(Okio.source(file))) {

while (!source.exhausted()) {

String line = source.readUtf8LineStrict(1024L);

System.out.println(line);

}

}

}

写文本文件

public void writeEnv(File file) throws IOException {

Sink fileSink = Okio.sink(file);

BufferedSink bufferedSink = Okio.buffer(fileSink);

for (Map.Entry<String, String> entry : System.getenv().entrySet()) {

bufferedSink.writeUtf8(entry.getKey());

bufferedSink.writeUtf8("=");

bufferedSink.writeUtf8(entry.getValue());

bufferedSink.writeUtf8("\n");

}

bufferedSink.close();

}

类似于读文件使用SourceBufferedSource, 写文件的话,则是使用的SinkBufferedSink,同样的在BufferedSink接口中也提供了丰富的接口方法:

其中Okio.buffer(fileSink)内部返回的实现对象是一个RealBufferedSink类的对象, 跟RealBufferedSource一样它也是一个装饰者对象,具备Buffer缓冲功能。同样,以上代码可以使用jdk的try-with-source语法获得更加简便的写法:

public void writeEnv(File file) throws IOException {

try (BufferedSink sink = Okio.buffer(Okio.sink(file))) {

sink.writeUtf8(“啊啊啊”)

.writeUtf8("=")

.writeUtf8(“aaa”)

.writeUtf8("\n");

}

}

其中的换行符\n,Okio没有提供单独的api方法,而是要你手动写,因为这个跟操作系统有关,不过你可以使用System.lineSeparator()来代替\n,这个方法在Windows上返回的是"\r\n"在UNIX上返回的是"\n"。

在上面的代码中,对writeUtf8()进行了四次调用, 这样要比下面的代码更高效,因为虚拟机不必对临时字符串进行创建和垃圾回收。

sink.writeUtf8(entry.getKey()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值