Hur man läser och skriver Byte-strömmar

Läsa och skriva binära strömmar är en av de vanligaste I / O-uppgifterna en Java-applikation kan utföra. Det kan utföras genom att titta på varje enskild byte i en ström eller genom att använda en mer strukturerad buffrad metod.

Notera: Den här artikeln tittar på läsning av binära data från a

example.jpg
fil. Om du provar den här koden ersätter du helt enkelt namnet på
example.jpg
med sökvägen och namnet på en jpeg-fil på din dator.

Byte by Byte

De

java.io
klass var den första Java-api som gav Input / Output-funktionalitet. Den har två metoder som kan användas för att mata in och mata ut byte-strömmar (block med 8 bitar) från och till en fil. Dessa klasser är
Fileinputstream
och
Fileoutputstream
. Dessa metoder tillhandahåller en grundläggande metod för I / O genom att låta en fil matas in eller matas ut en byte åt gången. I praktiken är det bättre att använda en buffrad metod för binära strömmar, men det är bra att titta på den mest grundläggande byggstenen i Java I / O-funktionen.

Lägg märke till hur vi placerar I / O-hanteringen inuti

försök, fånga, äntligen
blockera detta för att se till att vi hanterar IO-undantag och för att stänga strömmarna ordentligt. Fångstblocket visar alla I / O-undantag som uppstår och skriver ut ett meddelande för användaren. I det slutliga blocket är det viktigt att stänga strömmarna uttryckligen genom att kalla den nära metoden annars kommer de att förbli öppna och slöseri med resurser. Det finns en kontroll för att se om
Fileinputstream
och
Fileoutputstream
är noll innan du försöker stänga. Detta beror på att ett I / O-fel kan uppstå innan strömmarna initialiseras. Om filnamnet till exempel är felaktigt öppnas inte strömmen ordentligt. I
Prova
block kan vi lägga till kod för att läsa i byte: The
läsa
metoden läses i en byte från
Fileinputstream
och skrivmetoden skriver en byte till
Fileoutputstream
. När slutet på filen nås och det inte finns fler byte att mata in returneras värdet -1.

Nu när Java 7 har släppts kan du se fördelen med en av dess nya funktioner - försöket med resursblock. Detta innebär att om vi identifierar strömmarna till försöksblocket i början kommer det att hantera stängningen av strömmen för oss. Detta eliminerar behovet av det slutliga blocket i föregående exempel:

De fullständiga Java-kodlistorna för de två versionerna av byteläsningsprogrammet finns i Binary Stream Exempelkod.