`
arcticfox9902
  • 浏览: 108406 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

[Google Guava笔记](八)io

阅读更多

6        com.google.common.io:与 Java I/O相关的工具类和方法。

 

接口:

6.1    ByteArrayDataInput:从内存中读取 byte数组,它的方法都是在父接口中定义的,提供了相同的功能,但是不抛出 IOException,如果某个方法过早的到达数组的尾部,则会抛出 IllegalStateException

6.2    ByteArrayDataOutput:将数据写到内存中的 byte数组, 它的方法大部分是在父接口中定义的,提供了相同的功能,但是不抛出 IOException

6.3    ByteProcessor:处理输入 /输出流中的数据的回调接口。 processBytes(byte[] buf, int off, int len)方法用来处理输入流中的一个数据块 (被读入的一行数据 )

6.4    InputSupplier<T>:提供可读的 byte/字符流的工厂类。 getInput()方法返回一个封装了可读资源的对象,它可能会在同一个资源上被调用多次,返回的是独立的通道,类似于 iterator,在一个通道上移动游标位置不会影响其它通道的游标。

6.5    LineProcessor<T>:和流的 readLines方法一起用的回调类。 processLine(String line)方法对读入的每行数据进行处理。

6.6    OutputSupplier<T>:提供可写的 byte/字符流的工厂类。 getOutput()方法返回一个封装了可写资源的对象,它可能会在同一个资源上被调用多次,返回的是独立的通道,类似于 iterator,在一个通道上移动游标位置不会影响其它通道的游标。

类:

6.7    AppendableWriter:继承自 java.io.Writer,把所有的输出放到内部封装的 target上,如果 target是可刷新或可关闭的, writer flush() close()会被委托给 target

write(...):将数据追加到 target中。

append(...):将数据追加到 target中。

flush():如果 target是可刷新的,则刷新 target

close():如果 target是可关闭的,则关闭 target

6.8    ByteStreams:提供了与 byte数组和 I/O stream相关的工具方法。

静态方法:

newInputStreamSupplier(...):返回 InputSupplier<ByteArrayInputStream>(继承 InputSupplier的匿名内部类 )的实例。

write(byte[] from, OutputSupplier<? Extends OutputStream> to):将 from写到 to的输出流。

copy(...):与 write功能类似。

toByteArray(...):将输入转换为 byte数组并返回。

          newDataInput(...):返回 ByteArrayDataInput(实现 ByteArrayDataInput的内部类—— ByteArrayDataInputSteam)的实例。

          newDataOutput(...):返回 ByteArrayDataOutput(实现 ByteArrayDataOutput的内部类—— ByteArrayDataOutputSteam)的实例。

length(InputSupplier<? Extends InputStream> supplier):返回提供的输入流的长度 (字节数 )

          equal(InputSupplier<? Extends InputStream> supplier1, InputSupplier<? Extends InputStream> supplier2):判断 supplier1 supplier2是否相等。

readFully(InputStream in, byte[] b):将 in中的数据读到 b中。

readFully(InputStream in, byte[] b, int off, int len):将 in中从 off开始的 len个字节都到 b中。

skipFully(InputSteam in, long n):忽略 in n个字节。

          readBytes(InputSupplier<? extends InputStream> supplier,ByteProcessor<T> processor ):将 supplier提供的输入流中的数据读入,并用 processor处理,返回处理后的结果。

          getChecksum(InputSupplier<? Extends InputStream>supplier, final Checksum checksum):获取 supplier提供的流的校验和。

         getDigest(InputSupplier<? Extends InputStream>supplier, final MessageDigest md):获取 supplier提供的流的摘要( MessageDigest 类为应用程序提供信息摘要算法的功能,如 MD5 SHA 算法)。

         read(InputStream in, byte[] b, int off, int len):将输入流 in读到 b中,返回读入的字节数。

         slice(final InputSupplier<? Extends InputStream>supplier, final long offset, final long length):顾名思义,返回 supplier的分片。

join(...):将多个 suppliers合在一起。

 

6.9 Closeables:提供了与 Closeable对象相关的工具方法。

静态方法:

          close(Closeable closeable, boolean swallowIOException):尝试关闭 closeable,关闭失败的情况下,如果 swallowIOException true,不抛出异常,只在日志里记录关闭失败信息,如果 swallowIOException false,则抛出异常。

closeQuietly(Closeable closeable):关闭 closeable,不抛出异常。

6.10 CountingInputStream:继承了 FilterInputStream类,提供了为读入的字节计数的功能。 封装了计数器 count和标记 mark

    FilterInputStream 包含其他一些输入流,它将这些流用作其基本数据源,它可以直接传输数据或提供一些额外的功能。 FilterInputStream 类本身只是简单地重写那些将所有请求传递给所包含输入流的 InputStream 的所有方法。 FilterInputStream 的子类可进一步重写这些方法中的一些方法,并且还可以提供一些额外的方法和字段。

成员方法:

getCount():返回 count

read():读入数据,如果读入成功, count自增,并返回读入的字节数。

read(byte[] b, int off, int len):读入数据,如果读入成功,将读入的字节数加到 count中,并返回读入的字节数。

skip(long n):跳过输入流中的 n个字节,将读入的字节数加到 count中,并返回读入的字节数。

mark(int readlimit):在此输入流中标记当前的位置,将 mark标记为 count

reset():如果输入流支持标记,且已标记过,则将当前位置重置为 mark count重置为 mark

6.11  CountingOutputStream:继承了 FilterOutputStream类,提供了为写出的字节计数的功能。封装了计数器 count。只重载了 write(...)方法,提供了 getCount()方法。

6.12  FileBackedOutputStream:一般的输出流将数据缓存到一个 byte数组里,而这个类定义的输出流中,一旦数据量达到一定数量就将数据缓存到文件中。

6.13  Files:提供了与 File相关的工具方法。大部分方法都可以顾名思义,挑几个我根据名字看不懂的记一下。

静态方法:

touch(File file):创建一个空文件,如果文件已经存在,则将最后修改时间改为当前时间。

map(...):将文件映射到内存,返回 MappedByteBuffer

          MappedByteBuffer是直接字节缓冲区,其内容是文件的内存映射区域。 映射的字节缓冲区是通过 FileChannel.map 方法创建的。此类用特定于内存映射文件区域的操作扩展 ByteBuffer 类。 映射的字节缓冲区和它所表示的文件映射关系在该缓冲区本身成为垃圾回收缓冲区之前一直保持有效。 映射的字节缓冲区的内容可以随时更改,例如,在此程序或另一个程序更改了对应的映射文件区域的内容的情况下。这些更改是否发生(以及何时发生)与操作系统无关,因此是未指定的。

6.14 Flushables:提供了与 Flushable相关的实用方法。

静态方法:

flush(Flushable flushable, boolean swallowIOException):刷新流,可选择是否抛出异常。

flushQuietly(Flushable flushable):与上面的方法类似,但不抛出异常。

6.15  LimitInputStream:继承了 FilterInputStream,这个类可限定读入的字节数。

6.16  LineBuffer:抽象类

6.17  LineReader

6.18  LittleEndianDataInputStream:继承 FilterInputStream,实现了 DataInput接口,这个类用 little-endian byte ordering short int float double long型的数据。

以下内容引自 : http://www.cppblog.com/erran/archive/2007/10/13/34115.html

         内存中一个 WORD值中的内容如下:
low byte high byte 
0x12      0x34 

那么这个 WORD中的值是 0x1234呢,还是 0x3412 ? 
熟悉 x86汇编的人立刻就知道这个值应为 0x3412,很对,但在一些情况下,比如说你在 SGI的机器上看到这种情况,则正好相反, 0x1234才是正确答 案,这与 CPU内部处理数据的方式有关。这两种处理方式都存在于不同厂商生产的 CPU之中,在上例中若此 WORD值为 0x3412的,我们称之为 little-endian, 若为 0x1234的,我们称之为 big-endian,这是两种不同的 byte orders MSDN中有比较精确的定 义如下:
Byte Ordering Byte ordering Meaning 
big-endian The most significant byte is on the left end of a word. 
little-endian The most significant byte is on the right end of a word. 

 

6.19  LittleEndianDataOutputStream:继承 FilterOutputStream,实现了 DataOutput接口,这个类用 little-endian byte ordering short int float double long型的数据。

6.20  MultiInputStream:继承 InputStream,内部封装了 InputSupplier列表的迭代器,一次只能打开一个流。

6.21  MultiReader:继承 Reader,与上面的方法类似。

6.22  NullOutputStream:继承 OutputStream,重载了 write方法,该方法不做任何事,意味着丢弃了被输出的字节。

6.23  PatternFilenameFilter:实现了 FilenameFilter接口,封装了一个 pattern,只接受文件名符合 pattern的文件。

6.24  Resources:提供了一组静态的实用方法,通过这些方法可以使用类路径下的资源。需要注意的是,虽然这些方法的参数中有 URL,但它与 HTTP或其它的类路径下的资源没有联系。使用范例(来自http://ajoo.iteye.com/blog/738286,非常感谢 ajoo!为什么我今天才看到他的blog呢?真是out啊...):

URL url = Resources.getResource("mypackage/myfile.txt");  

得到了这个 URL, 就可以从里面读出内容 . 如果它是一个文本文件 , 可以用 Resources.toString():

String content = Resources.toString(url);  

 

          最近被问到为什么 Resources不能用于获取本地类加载器之外的资源,我看到上面的例子后,觉得可能是因为一般先通过 getResource()方法获取 URL,然后再把 URL作为参数调用 Resource的其他方法,而 getResource()方法是通过 Resources.class.getClassLoader()这个类加载器来获取资源的,所以这个资源必须由加载 Resources类的类加载器来加载。

       虽然这个类的注释里说URL和HTTP没有关系,但究竟可不可以获取HTTP的资源呢,做了以下尝试:

String content = Resources.toString(new URL(“http://www.iteye.com/ ”));

          结果发现其实是可以获取 网络资源的(只是 ITeye不允许用爬虫进行网页抓取,上面这样的访问被拒绝了,哈哈!),因为这个类的以URL为参数的那几个静态方法其实直接用的是URL的openStream()方法,和类加载器没有太大关系,类加载器只是在getResource()方法里涉及。

 

以上。

 

分享到:
评论

相关推荐

    不加密Google Guava视频教程.txt

    ├─Google Guava 第01讲-Joiner详细介绍以及和Java8Collector对比.wmv ├─Google Guava 第02讲-Guava Splitter详细讲解以及实战练习.wmv ├─Google Guava 第03讲-Preconditions&Objects;&assert;讲解.wmv ├─...

    google guava 中文教程

    Guava的IO模块提供了流式处理的读写操作,如CharSource和ByteSource,以及Files工具类,可以简化文件操作。例如,Files.copy()方法可以方便地进行文件复制,Charsets类定义了常见的字符编码。 七、原子类与并发原语...

    Google Guava 官方教程

    **Google Guava官方教程** Google Guava 是一个广泛使用的 Java 库,它提供了一系列现代编程实用工具,旨在简化常见的编程任务。Guava 提供了集合框架的扩展、并发支持、缓存机制、字符串处理工具、I/O 工具以及...

    使用google guava 实现定时缓存功能

    在IT行业中,Google Guava库是一个非常强大的工具集,它为Java开发人员提供了一系列实用的集合、缓存、并发和I/O工具。本篇文章将详细探讨如何利用Guava库实现定时缓存功能,以提高应用的性能和效率。 首先,Guava...

    Getting Started with Google Guava

    《Getting Started with Google Guava》是Bill Bejeck所著,旨在帮助Java开发者通过Google Guava库编写更优质、更高效的代码。Bill Bejeck是一位拥有10年经验的资深软件工程师,专注于各种项目的开发工作。在写作...

    google开源项目guava.jar包

    谷歌的Guava库是Java开发中的一个非常重要的开源项目,它提供了一系列的高效、实用的工具类,大大简化了常见的编程任务。Guava的核心特性包括集合框架、缓存、原生类型支持、并发库、字符串处理、I/O操作等。这个...

    谷歌guava的jar包和源码,值得收藏

    **谷歌Guava库详解** 谷歌Guava库是一个广泛使用的Java库,它提供了许多核心库的实用工具类,包括集合、缓存、并发、I/O、字符串处理、泛型 utilities、错误处理、网络、数学运算以及类加载器支持等多个方面。Guava...

    google guava

    Google Guava是一个由Google开发并维护的开源Java库,它为Java开发者提供了许多实用的工具类和集合框架,极大地简化了常见的编程任务。这个框架包含了多个模块,如基础(base)、缓存(cache)、I/O(io)以及并发...

    guava-20.0-API文档-中文版.zip

    标签:google、guava、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    guavapdf-ch_GoogleGuava官方教程_

    **Google Guava官方教程概述** Google Guava 是一个开源库,为Java开发人员提供了一组核心库,包括集合、缓存、并发工具、I/O工具、字符串处理、实用方法等。这个官方教程主要针对Guava库的使用进行详细介绍,帮助...

    Google Guava

    Google Guava库是由Google开发的一个开源项目,旨在提供Java开发中常用的基础功能。它的目标是简化Java编程,为开发者提供更加清晰、高效的代码编写方式。通过使用Guava库,开发者可以不必在每次项目中重复编写相同...

    Google Guava 多版本集合

    Guava是一种基于开源的Java库,其中包含谷歌正在由他们很多项目使用的很多核心库。这个库是为了方便编码,并减少编码错误。这个库提供用于集合,缓存,支持原语,并发性,常见注解,字符串处理,I/O和验证的实用方法...

    Getting Started with Google Guava code

    **Google Guava简介** Google Guava 是一个广泛使用的开源库,为Java开发人员提供了一系列实用工具类和集合框架。这个库旨在简化常见的编程任务,提高代码的可读性和可维护性。Guava 提供了丰富的功能,包括缓存、...

    google Guava集合工具类(超实用)

    Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libraries, common annotations, string processing, I/O, 等等. 这些高质量的 API 可以使你...

    Google Guava 官方教程 - v1.1.2018-07-22.pdf

    Google Guava 官方教程 v1.1 2018-07-22 https://github.com/tianbian224/GuavaLearning/blob/master/Google%20Guava%20%E5%AE%98%E6%96%B9%E6%95%99%E7%A8%8B%20-%20v1.1.pdf

    Google的Guava工具包

    Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libraries, common annotations, string processing, I/O, 等等. 这些高质量的 API 可以使你...

    Getting Started with Google Guava.pdf

    Google Guava 是一个由Google提供的开源Java库,它包含了许多强大的工具类和集合类,这些类可以帮助开发者更高效地编写Java代码。Guava的目标是提供一种更加简洁、优雅的方式来处理常见的编程任务,并且在很多情况下...

    com.google.guava_1.6.0.jar.zip

    《深入解析Google Guava库:Ints模块》 在Java编程中,Google Guava库是一个不可或缺的工具集合,它提供了大量的高效、实用的类和方法,极大地提升了开发效率。本次我们将聚焦于Guava中的`Ints`模块,通过分析`...

    google-guava.jar

    《谷歌Guava库详解》 谷歌Guava,全称为Google Guava,是Google推出的一款Java库,它包含一系列基础工具类,旨在简化Java开发工作,提高代码效率和可维护性。Guava的核心特性包括集合框架、缓存、原始类型支持、...

    guava-17.0-API文档-中文版.zip

    标签:google、guava、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

Global site tag (gtag.js) - Google Analytics