Temat: Czytanie zapis binarnych danych do pliku
Łukasz Grabski:
a BufferedInputStream?
Widzę że jest wiele możliwości do wyboru.
Problem przedstawia się następująco: ma być tworzony i czytany w pliku katalog płyt CD. Mamy tam wielokrotnie czytanie małych porcji danych jak rozmiar, czas czy indeks w pliku a także jednobajtową długość nazwy. Zależy mi więc na tym aby zapis był buforowany.
new DataInputStream(new FileInputStream(fileName));
nie jest buforowany
BufferedReader nie nadaje się bo zwraca łańcuchy char zamiast danych.
A jeszcze jest BufferedInputStream.
A może BufferedInputStream+DataInputStream ?
new DataInputStream(new BufferedInputStream(new FileInputStream()))
wtedy można by czytać np. inta z bufora.
A co z użyciem surowego BufferedInputStream? Ma funkcję read:
public int read(byte[] b, int off, int len) throws IOException
Jak konwertujemy tablicę 4 bajtów na inta, nie możemy po prostu rzutować, czy konwertuje do Big Endian?
Może BufferedInputStream będzie szybsze niż DataInputStream bo to drugie czyta po bajcie i konwertuje na Big Endian. (a w jakim formacie Java trzyma double i float?). Użycie samego BufferedInputStream nie wymusza Big Endian?
Drugą sprawą są łańcuchy.
Trzymane są jako UTF8, przy czym w większości przypadków nie występują znaki spoza 7-bitowego ASCII. Czy wszystkie czytać jako UTF8, bo w klasie DataInputStream jest readUTF a nie ma tego w BufferedInputStream?
Czyli, myślę że rozwiązaniem będzie:
- new DataInputStream(new BufferedInputStream(new FileInputStream()))
- Big Endian bo jest obsługiwane przez DataInputStream
- wszystkie ciągi znakowe traktowane jako UTF8
W jakim formacie plikowym musi być string?
Źródła pokazują:
int utflen = in.readUnsignedShort();
czyli na początku muszą być dwa bajty określające długość
Andrzej Borucki edytował(a) ten post dnia 07.06.11 o godzinie 16:38