ファイル「A」からバイトを読み込もうとしています。私は位置を求めるためにRandomAccessFileを使用しています。そして、 "y"バイトを読み込む必要があります。(JAVA)ファイルから「バッファ」バイト(または「y」バッファ)を読み込みます。
私は4096バイトのバッファを持っていて、 "y"が4096の倍数でないならば、私はもっと多くのバイトを読みます。
バッファを1バイトに設定すると、問題なく読み書きできます(ただし、遅すぎます)。
私が現時点で持っているコードは次のとおりです。
public void extractFile(int pos) {
try {
RandomAccessFile raf = new RandomAccessFile(this.archive, "r");
/* Trying to read */
raf.seek(arquivos.get(pos).getPosicaoInicio());
ByteArrayOutputStream byteOutput = new ByteArrayOutputStream();
byte[] buf = new byte[1]; // With 1 I can read, because every "y" is multiple of 1
byte[] bytes;
while (byteOutput.size() < arquivos.get(pos).getTamanho()) {
byteOutput.write(buf, 0, raf.read(buf));
}
bytes = byteOutput.toByteArray();
byteOutput.close();
raf.close();
/* Writing */
File futuroArquivo = new File(arquivos.get(pos).getNome());
FileOutputStream fos = new FileOutputStream(futuroArquivo);
fos.write(bytes);
fos.flush();
fos.close();
} catch (IOException ex) {
}
}
PS: "arquivos.get(POS).getTamanho()" 私の "Y" である
PS 2:私ができます「y」バイトの後ろにあるファイル全体を読む、他にもあるものがある
['RandomAccessFile.read(byte [] buffer、int offset、int length)']を使用したことがありますか?](https://docs.oracle.com/javase/8/docs/api/java/io/RandomAccessFile .html#read-byte:A-int-int-)? – EJP
ありがとうございます!それが本当に私を助けました。私は他の何かが必要でしたが、これは私の目を開いたものです。 –