Ako môžeme napísať byte pole do súboru (a prečítajte si ju späť od tohto súboru) v Jave?
Áno, všetci vieme, existuje už veľa otázok, ako že, ale že si veľmi chaotický a subjektívne vzhľadom na skutočnosť, že existuje mnoho spôsobov, ako na splnenie týchto úloh.
Tak poďme znížiť rozsah otázka:
Domény:
- Android / Java
To, čo chceme:
- Rýchlo (ako je to možné)
- Bug-free (v pevne starostlivý spôsob)
To, čo nie sme robiť:
- Knižníc tretích strán
- Všetky knižnice, ktoré si vyžadujú Android API neskôr ako 23 (Ibištek)
(Tak, že sa vylučuje Apache Commons, Google Guava, Java.nioa necháva nás dobrý ol' Java.io)
Čo budeme potrebovať:
- Bajt poľa je vždy presne rovnaký (obsah a veľkosť) potom, čo šiel cez napísať-potom-čítať procesu
- Napíšte metóda vyžaduje iba dva argumenty: Súbor súbor, a byte[] data
- Čítať metóda vracia byte[] a vyžaduje iba jeden argument: Súbor súbor
V mojom konkrétnom prípade, tieto metódy sú súkromné (nie knižnicu) a NIE je zodpovedný za nasledujúce, (ale ak chcete vytvoriť viac univerzálne riešenie, ktoré sa týka širšieho publika, ísť na to):
- Vlákno-bezpečnosť (súbor nebude možné získať prístup do viac ako jeden proces naraz)
- Súbor je null
- Súbor ukážte ukazovateľom na neexistujúce miesto
- Nedostatok povolenia na umiestnenie súboru
- Bajt poľa je príliš veľký
- Bajt poľa je null
- Rokovaní s "index" "dĺžka" alebo "pridať" argumenty/spôsobilostí
Takže... sme akési hľadanie konečné nepriestrelné kód že ľudia v budúcnosti možno predpokladať, je bezpečné používať, pretože vaša odpoveď má veľa hore-hlasov, a tam sú žiadne komentáre, ktoré hovoria, "Že by mohol zlyhať, ak..."
To je to, čo som doteraz:
Napíšte Bajtov Do Súboru:
private void writeBytesToFile(final File file, final byte[] data) {
try {
FileOutputStream fos = new FileOutputStream(file);
fos.write(data);
fos.close();
} catch (Exception e) {
Log.i("XXX", "BUG: " + e);
}
}
Prečítajte Si Bajtov Zo Súboru:
private byte[] readBytesFromFile(final File file) {
RandomAccessFile raf;
byte[] bytesToReturn = new byte[(int) file.length()];
try {
raf = new RandomAccessFile(file, "r");
raf.readFully(bytesToReturn);
} catch (Exception e) {
Log.i("XXX", "BUG: " + e);
}
return bytesToReturn;
}
Z toho, čo som čítal, že prípadné Výnimky sú:
FileNotFoundException : som správne, že toto by sa nemalo stať, tak dlho, ako cestu k súboru sa dodáva bola odvodená pomocou Android vlastné interné nástroje a/alebo ak aplikácia bola testovaná správne?
IOException : ja naozaj neviem, čo by mohlo spôsobiť túto... ale ja som za predpokladu, že neexistuje žiadny spôsob, ako okolo neho, ak to robí.
Takže s tým na mysli... môžete tieto metódy sa zlepšiť alebo nahradiť, a ak áno, čo?