Я пытаюсь написать программу, которая может принимать по 1 бит за раз, а затем записывать 2 байта в файл после того, как были собраны 16 бит.Java - BufferOverflowException при попытке записи в файл 2 или более раз
Вот основной код:
public void addBit(int bit) throws IOException{
if(this.byteholder.length() < 16){
this.byteholder += "" + bit;
}
else{
write();
}
}
public void write() throws IOException{
if(this.byteholder.length() == 16){
System.out.println(this.byteholder);
int a = Integer.parseInt(byteholder, 2);
System.out.println(Integer.toBinaryString(a));
ByteBuffer bytes = ByteBuffer.allocate(2).putInt(a);
byte[] byteArray = bytes.array();
out.write(byteArray);
out.flush();
this.byteholder = "";
}
}
public static void main(String[] args) {
try {
File f = new File("test");
BitFileWriter out = new BitFileWriter(f);
for(int i=0; i<2; i++){
out.addBit(1);
out.addBit(0);
out.addBit(0);
out.addBit(1);
out.addBit(0);
out.addBit(1);
out.addBit(1);
out.addBit(0);
out.addBit(1);
out.addBit(0);
out.addBit(0);
out.addBit(1);
out.addBit(0);
out.addBit(1);
out.addBit(1);
out.addBit(0);
}
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
основной метод используется только для тестирования методов выше. Переменная «out» - это FileOutputStream, «byteholder» - это строка, которая содержит двоичный код, а файл «test» - это случайный пустой файл, который у меня есть в моем проекте проекта Eclipse.
Проблема, которую я получаю, заключается в том, что если я запускаю свой тестовый код более одного раза (цикл кода с добавлением более одного раза), я получаю исключение BufferOverflowException, и я понятия не имею, почему. Я не уверен, как правильно использовать ByteBuffer, но мне нужно, чтобы он мог писать по 2 байта в файл за раз. Может ли кто-нибудь помочь? Благодарю.
Также вопрос BONUS! Всякий раз, когда я успешно запускаю свой тестовый код, я вижу, что размер файла в моем «тестовом» файле не изменяется (по-прежнему говорит 0 байтов). Зачем?. Я запускаю Windows 10 бит.
EDIT: Вот мой трассировки стека:
Exception in thread "main" java.nio.BufferOverflowException
at java.nio.Buffer.nextPutIndex(Unknown Source)
at java.nio.HeapByteBuffer.putInt(Unknown Source)
at CompPck.BitFileWriter.write(BitFileWriter.java:30)
at CompPck.BitFileWriter.addBit(BitFileWriter.java:21)
at CompPck.BitFileWriter.main(BitFileWriter.java:66)
У вас есть трассировка стека? –
@SteveSmith Упс, спасибо, что напомнил мне. Теперь я отправил трассировку стека. – Schytheron