关于Guava中I/O中的ByteCharStreams的各个方法解读

2.1 newInputStreamSupplier(byte[

public static InputSupplier<ByteArrayInputStream>newInputStreamSupplier(byte[] b)

该方法将输入的byte数组做成一个含有ByteArrayInputStream的工厂返回。

2.2 newInputStreamSupplier(Byte[], int, int)

public static InputSupplier<ByteArrayInputStream>newInputStreamSupplier(byte[] b, int off,

int len)

该方法是从输入的字节数组里读出一部分数据,然后做成含有ByteArrayInputStream的工厂返回。

参数b:输入的字节数组

参数off:从输入字节数组中读取的第一个字符位置

参数len:从输入字节数组中读取的字符个数

2.3 write(byte[], OuputSupplier)

public static void write(byte[] from, OuputSupplier<? extends OutputStream> to)

该方法是将一些数据写到一个输出流中,只不过不用自己一个一个写了,Guava集成到这样的方法里了。

参数from:要写的字节数组

参数to:使用OuputSupplier的输出流

使用方法:

ByteStreams.write(byte_from,Files.newOutputSupplier(file_to));

2.5 copy(InputSupplier,OutputSupplier)

public static long copy(InputSupplier<? extends InputStream>from, OutputSupplier<? extends OuputStream> to)

该方法是通过把给定的输入提供者中的全部数据拷贝到输出提供者里边,返回拷贝的数据个数,用户不用担心是否关闭输入输出流,该方法直接全部代劳。

使用方法:

ByteStreams.copy(Files.newInputSupplier(file_from),Files.newOutputSupplier(file_to));

2.6 copy(InputSupplier,OuputStream)

public static long copy(InputSupplier<? extends InputStream>from, OuputStream to)

该方法是把给定的输入工厂或者提供者里边的数据拷贝到一个输出流中,返回拷贝了多少数据,但是注意,这里需要自己写OuputStream,所以不要忘记flush或者close它了。

使用方法:

ByteStreams.copy(Files.newInputSupplier(file_from),out);

out.flush();

out.close();//不要忘记了

2.7 copy(InputStream,OutputSupplier)

public static long copy(InputStream from, OutputSupplier<?extends OutputStream> to)

该方法从InputStream读入的数据,然后拷贝给输出提供者,这里方法会关闭输出流,而不会关闭输入流,所以编写的时候需要注意。

使用方法:

ByteStreams.copy(in,Files.newOutputSupplier(file_to));

in.close();//不要忘记了

2.8 copy(InputStream from,OutputStream to)

public static long copy(InputStream from, OutputStream to)

这个方法和java里的语法一样,只不过Guava把他给集成了,你不需要自己去编写很长的代码,只需要一个方法,所有工作都OK了,只不过此方法不会帮你关闭输入输出流,所以自己要记着关闭。

使用方法:

ByteStreams.copy(in, out);

in.close();out.flush();out.close();

2.9 copy(ReadableByteChannel,WriteableByteChannel)

public static long copy(ReadableByteChannelfrom, WriteableByteChannel to)

这个方法是将所有读通道里的数据拷贝到写通道里,这个也是不会帮你关闭输入输出流的。

使用方法暂时没有搞清楚,貌似是和Socket有关的。

2.10 toByteArray(InputStream in)

public static byte[] toByteArray(InputStream in)

这个方法是将输入流的数据转化成byte[]返回,方法不会主动关闭输入流。

使用方法:

byte[] buffer = ByteStreams.toByteArray(in);

in.close();

2.11 toByteArray(InputSupplier)

public static byte[] toByteArray(InputSupplier<? extendsInputStream> supplier)

这个方法是将输入工厂或者提供者里边的数据转化成byte[]并返回,这里方法会自动关闭输入流。

使用方法:

byte[] buffer = ByteStreams.toByteArray(Files.newInputSupplier(file_from));

2.12 newDataInput(byte[] bytes)

           public staticByteArrayDataInput newDataInput(byte[] bytes)

该方法利用输入的byte[]做成一个ByteArrayDataInput对象并返回。

使用方法:

ByteArrayDataInput byteArray =ByteStreams.newDataInput(buffer);

//执行ByteArrayDataInput的操作,ByteArrayDataInput是继承自DataInput

2.13 newDataInput(byte[] bytes, intstart)

           public staticByteArrayDataInput newDataInput(byte[] bytes, int start)

该方法是利用输入的数据的一部分来完成11的功能,start是数组开始的位置。

使用方法和上面的一样。

2.14 newDataOuput()

           public staticByteArrayDataOutput newDataOuput()

直接返回一个ByteArrayDataOutput对象,所有的参数都是default

使用方法同11

2.15 newDataOutput(int size)

           public staticByteArrayDataOutput newDataOutput(int size)

返回一个指定的大小的ByteArrayDataOutput的对象。

使用方法同11

2.16 length(InputSupplier)

           public static longlength(InputSupplier<? extends InputStream> supplier)

返回指定输入工厂或者提供者里的数据有多少个字节。

使用方法:

long length =ByteStreams.length(Files.newInputSupplier(file_from));

//这是正常用法,但是不知道怎么回事,一直在这个地方运行,很长时间都没有结束,没办法,就是用了下边的方法

byte[] b = ByteStreams.toByteArray(Files.newInputSupplier(file_from));

long length =ByteStreams.length(ByteStreams.newInputSupplier(b));

2.17 equal(InputSupplier,InputSupplier)

           public static boolean equal(InputSupplier<?extends InputStream> supplier1, InputSupplier<? extends InputStream>supplier2)

返回是否两个输入工厂中的数据个数是否一样,一样返回true,不一样返回false。

使用方法:

boolean b =ByteStreams.equal(Files.newInputSupplier(file1),Files.newInputSupplier(file2));

2.18 readFully(InputStream in,byte[] b)

           public static voidreadFully(InputStream in, byte[] b)

该方法是用输入流中的数据填充字节数组b,方法不会关闭输入流。该方法和DatInput中的readFully是一样的。

使用方法:

ByteStreams.readFully(inputStream, buffer);

需要注意的是,buffer的大小不能超过inputStream里边的数据个数,否则会报错

2.19 readFully(InputStream in,byte[] b, int off, int len)

           public static voidreadFully(InputStream in, byte[] b, int off, int len)

该方法是使用输入流中的数据填充字节数组中的指定连续位置,和DataInput中的readFully方法实现一样的功能。

参数in:被读取数据的输入流

参数b:要读入数据的字节数组

参数off:b中要从第几个位置开始读

参数len:是要读取几个字节

使用方法同上

2.20 skipFully(InputStream in, longn)

           public static voidskipFully(InputStream in, long n)

该方法是丢弃输入流中的前n个字符。

使用方法同17

2.21 readBytes(InputSupplier,ByteProcessor<T>)

           publicstatic <T> T readBytes(InputSupplier<? extends InputStream>supplier1, ByteProcessor<T> processor)

该方法的含义是把由InputSupplier提供的输入流中的数据读出来,然后返回一个类型的集合T,但是在读取的过程中,方法会做一定的检查,如果检查合格的话,就能返回这一部分,如果不合格,这一部分的字节就给丢掉。

使用方法,但是由于ByteProcesser类没有搞懂,所以使用方法还是待研究。

2.22 getChecksum(InputSupplier,Checksum)

           public static longgetChecksum(InputSupplier<? extends InputStream> supplier, Checksumchecksum)

该方法是对于由InputSupplier提供的输入流进行编码校验,如果验证成功就会输出验证的值,然后Checksum对象将会重置。

使用方法:

long n = ByteStreams.getChecksum(Files.newInputStreamSupplier(file),new CRC32());

           publicstatic HashCode hash(InputSupplier<? extends InputStream> supplier,HashFunction hashFunction)

没看懂,待研究。

2.23 read(InputStream in, byte[] b,int off, int len)

           public static intread(InputStream in, byte[] b, int off, int len)

此方法和18的功能是一样的。

2.24 slice(InputSupplier, longoffset, long length)

           public staticInputSupplier<InputStream> slice(InputSupplier<? extendsInputStream> supplier, long offset, long length)

该方法是将提供的输入工厂中数据从offset开始,取出length个,然后打包成InputSupplier对象,并返回。

2.25 join(Iterable  suppliers)

           public staticInputSupplier<InputStream> join(Iterable<? extends InputSupplier<?extends InputStream>> suppliers)

该方法是将一个InputSupplier集合归并到一个InputSupplier对象里,并返回。

2.26 join(InputSupplier<?extends InputStream> … suppliers)

           public staticInputSupplier<InputStream> join(InputSupplier<? extendsInputStream> … suppliers)

该方法里的参数是可变的,这里的InputSupplier不是一个集合,而是可以随意写任意个,然后该方法把这些InputSupplier都归并到一个InputSupplier对象里,并返回。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值