ファイル全体を読み込んでビットを書き込むファイルリーダーがあります。私はこれを呼び出すクラスでファイルのビットを読み込んで保存する
import java.io.*;
public class FileReader extends ByteArrayInputStream{
private int bitsRead;
private int bitPosition;
private int currentByte;
private int myMark;
private final static int NUM_BITS_IN_BYTE = 8;
private final static int END_POSITION = -1;
private boolean readingStarted;
/**
* Create a BitInputStream for a File on disk.
*/
public FileReader(byte[] buf) throws IOException {
super(buf);
myMark = 0;
bitsRead = 0;
bitPosition = NUM_BITS_IN_BYTE-1;
currentByte = 0;
readingStarted = false;
}
/**
* Read a binary "1" or "0" from the File.
*/
public int readBit() throws IOException {
int theBit = -1;
if(bitPosition == END_POSITION || !readingStarted) {
currentByte = super.read();
bitPosition = NUM_BITS_IN_BYTE-1;
readingStarted = true;
}
theBit = (0x01 << bitPosition) & currentByte;
bitPosition--;
if(theBit > 0) {
theBit = 1;
}
return(theBit);
}
/**
* Return the next byte in the File as lowest 8 bits of int.
*/
public int read() {
currentByte = super.read();
bitPosition = END_POSITION;
readingStarted = true;
return(currentByte);
}
/**
*
*/
public void mark(int readAheadLimit) {
super.mark(readAheadLimit);
myMark = bitPosition;
}
/**
* Add needed functionality to super's reset() method. Reset to
* the last valid position marked in the input stream.
*/
public void reset() {
super.pos = super.mark-1;
currentByte = super.read();
bitPosition = myMark;
}
/**
* Returns the number of bits still available to be read.
*/
public int availableBits() throws IOException {
return( ((super.available() * 8) + (bitPosition + 1)) );
}
}
が、私は:
FileInputStream inputStream = new FileInputStream(file);
byte[] fileBits = new byte[inputStream.available()];
inputStream.read(fileBits, 0, inputStream.available());
inputStream.close();
FileReader bitIn = new FileReader(fileBits);
、正しくこの作品 は私が読んで役立つ、このクラスを持っています。 しかし、私は100MB以上の大きなファイルには問題があります。なぜなら、バイト[]には終わりがあるからです。
私はより大きなファイルを読んでいます。おそらく、私はこのコードをどのように改善できるかを示唆するかもしれません。
ありがとうございました。
)(利用でき、使用しないでください。 read()呼び出しの結果を無視してはいけません。 available()はファイルのサイズを返しません。そして、read()はすべてを一度に読むとは限りません。 –
'java.io.Reader'を実装していない限り' FileReader'と呼ばないでください。また、 'java.io.FileReader'と衝突するので、それをしないでください。 –
チップありがとうございました – Streetboy