powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как внести изменения внутри BufferedOutputStream
4 сообщений из 4, страница 1 из 1
Как внести изменения внутри BufferedOutputStream
    #34493925
slaviq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно по сабжу.
Имеется алгоритмик по изменению значений в файле :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
RandomAccessFile randomaccessfile =  new  RandomAccessFile(fileName, "rw");
            randomaccessfile.seek(4L);
             byte  abyte0[] =  new   byte [ 4 ];
            abyte0[ 0 ] = ( byte )(recCount %  256 );
            abyte0[ 1 ] = ( byte )((recCount /  256 ) %  256 );
            abyte0[ 2 ] = ( byte )((recCount / 0x10000) %  256 );
            abyte0[ 3 ] = ( byte )((recCount / 0x1000000) %  256 );
            randomaccessfile.write(abyte0,  0 , abyte0.length);
            randomaccessfile.close();

перевожу метод для работы внутри BufferedOutputStream, без использования внешних файлов.

Вобщем задача:
есть "BufferedOutputStream stream", в нем записан файл
(ДБФ, генерится динамически, в конце генерялки есть подсчитанное кол-во строк, их нужно вставить, как и в случае с фалом).

Нужно достучаться до этого же "4L" и сделать ему "апдейт".

Заранее всем спасибо!
...
Рейтинг: 0 / 0
Как внести изменения внутри BufferedOutputStream
    #34494082
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slaviq...

BufferedOutputStream наследует интерфейсы последовательного (поточного) доступа к файлу. Поэтому необходимо заранее вычислить значение по смещению 4L и подсунуть туда число на "первом проходе". Или отказатся от использования наследников OutputStream в пользу RandomAccessFile.
...
Рейтинг: 0 / 0
Как внести изменения внутри BufferedOutputStream
    #34494892
ksm80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если дописать в конец то вполне подойдёт свой BufferedOutputStream
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
 package  project1;

 import  java.io.BufferedOutputStream;
 import  java.io.IOException;

 public   class  DBFBufferedOutputStream  extends  BufferedOutputStream {
     int  cnt;
    
     public  DBFBufferedOutputStream() {
        cnt =  0 ;
    }
    
     public   void  write( byte [] a)  throws  IOException {
        cnt++;
         super .write(a);
    }
    
     public   void  close()  throws  IOException {
         byte  abyte0[] =  new   byte [ 4 ];
                    abyte0[ 0 ] = ( byte )(cnt %  256 );
                    abyte0[ 1 ] = ( byte )((cnt /  256 ) %  256 );
                    abyte0[ 2 ] = ( byte )((cnt / 0x10000) %  256 );
                    abyte0[ 3 ] = ( byte )((cnt / 0x1000000) %  256 );        
         super .write(abyte0);
         super .close();
    }
    
}
    
}
...
Рейтинг: 0 / 0
Как внести изменения внутри BufferedOutputStream
    #34501451
slaviq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В том то и дело, получается что файл DBF уже сформирован, динамически вставлены записиси, а теперь подсчитаное количество строк(записей) нужно вставить в 4-6 байт начала файла.

Вышел из положения подсчетом строк в начале вызова функции и передаче количества строк в начале формирования файла.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как внести изменения внутри BufferedOutputStream
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]