0

私が今持っているのは FileInputStream を使用しています

int length = 1024*1024;
FileInputStream fs = new FileInputStream(new File("foo"));
fs.skip(offset);
byte[] buf = new byte[length];
int bufferSize = fs.read(buf, 0, length);
String s = new String(buf, 0, bufferSize);

グアバ ライブラリで ByteStreams を使用して、どうすれば同じ結果を実現できるのでしょうか。

どうもありがとう!

4

3 に答える 3

1

必要ないのに Guava を使おうとするのはなぜですか?

この場合、まさに RandomAccessFile を探しているように見えます。

File file = new File("foo");
long offset = ... ;
try (RandomAccessFile raf = new RandomAccessFile(file, "r")) {
  byte[] buffer = new byte[1014*1024];
  raf.seek(offset);
  raf.readFully(buffer);
  return new String(buffer, Charset.defaultCharset());
}
于 2013-10-25T21:39:10.810 に答える
0

私はよりエレガントな解決策を知りません:

public static void main(String[] args) throws IOException {
    final int offset = 20;
    StringBuilder to = new StringBuilder();

    CharStreams.copy(CharStreams.newReaderSupplier(new InputSupplier<InputStream>() {
        @Override
        public InputStream getInput() throws IOException {
            FileInputStream fs = new FileInputStream(new File("pom.xml"));

            ByteStreams.skipFully(fs, offset);

            return fs;
        }
    }, Charset.defaultCharset()), to);

    System.out.println(to);
}

唯一の利点はStringString.

于 2013-10-25T21:03:29.687 に答える