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.jpgfil. Om du provar den här koden ersätter du helt enkelt namnet på
example.jpgmed sökvägen och namnet på en jpeg-fil på din dator.
De
java.ioklass 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
Fileinputstreamoch
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, äntligenblockera 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
Fileinputstreamoch
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
Provablock kan vi lägga till kod för att läsa i byte: The
läsametoden läses i en byte från
Fileinputstreamoch 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.