Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как внести изменения внутри BufferedOutputStream / 4 сообщений из 4, страница 1 из 1
27.04.2007, 18:52:53
    #34493925
slaviq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как внести изменения внутри BufferedOutputStream
Собственно по сабжу.
Имеется алгоритмик по изменению значений в файле :
Код: 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
27.04.2007, 21:02:12
    #34494082
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как внести изменения внутри BufferedOutputStream
slaviq...

BufferedOutputStream наследует интерфейсы последовательного (поточного) доступа к файлу. Поэтому необходимо заранее вычислить значение по смещению 4L и подсунуть туда число на "первом проходе". Или отказатся от использования наследников OutputStream в пользу RandomAccessFile.
...
Рейтинг: 0 / 0
28.04.2007, 11:24:06
    #34494892
ksm80
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как внести изменения внутри BufferedOutputStream
если дописать в конец то вполне подойдёт свой 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
03.05.2007, 11:12:57
    #34501451
slaviq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как внести изменения внутри BufferedOutputStream
В том то и дело, получается что файл DBF уже сформирован, динамически вставлены записиси, а теперь подсчитаное количество строк(записей) нужно вставить в 4-6 байт начала файла.

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


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