En ström är ett kontinuerligt flöde av data. I Java används I/O-strömmar för att läsa från ingångskällor eller skriva till utdatadestinationer som filer. De tillhandahåller ett sätt att komma åt data sekventiellt. Java.io-paketet innehåller klasser för att hantera både byteströmmar och teckenströmmar och även för att konvertera mellan dem.
- Indataström: läser data från källan.
- Utdataström: skriver data till en destination.
När ska man använda Character Stream över Byte Stream:
I Java lagras tecken med Unicode-konventioner. Teckenström är användbart när vi vill bearbeta textfiler. Dessa textfiler kan bearbetas tecken för tecken. Teckenstorleken är vanligtvis 16 bitar.
När ska du använda Byte Stream över Character Stream:
Byteorienterad läser byte för byte. En byteström är lämplig för att bearbeta rådata som binära filer.
Nyckelpunkter när du använder och hanterar någon av ovanstående strömmar:
- Teckenströmsklasser slutar vanligtvis med Reader/Writer medan byteströmklasser slutar med InputStream/OutputStream.
- Exempelkoderna i den här artikeln använder obuffrade strömmar som är mindre effektiva. För bättre prestanda omsluter vi dem vanligtvis med BufferedReader/BufferedWriter (teckenströmmar) eller BufferedInputStream/BufferedOutputStream (byteströmmar).
- Stäng alltid strömmar efter användning för att frigöra resurser och förhindra fel.
- Ovanstående koder kanske inte körs i onlinekompilatorer eftersom filer kanske inte existerar.
Karaktärsström
I Java lagras tecken med Unicode-konventioner. Teckenström låter oss automatiskt läsa/skriva data tecken för tecken. Till exempel är FileReader och FileWriter teckenströmmar som används för att läsa från källan och skriva till destinationen.
KaraktärsströmmarExempel
Javaimport java.io.*; public class GFG { public static void main(String[] args) throws IOException { // Initially assigning null as we have not read anything FileReader sourceStream = null; try { // Reading from file sourceStream = new FileReader('/Users/mayanksolanki/Desktop/demo.rtf'); // Reading sourcefile and writing content to target file character by character. int temp; // If there is content inside file than read while ((temp = sourceStream.read()) != -1) System.out.println((char)temp); System.out.print('Program successfully executed'); } finally { if (sourceStream != null) sourceStream.close(); } } }
Produktion:
Skriver innehåll till målfilen tecken för tecken
Programmet har körts framgångsrikt
Byte Stream
En byteström i Java är en ström som hanterar in- och utmatning av rå 8-bitars binär data. Det används huvudsakligen för att läsa och skriva icke-textdata, såsom bilder ljudvideo eller någon binär fil. Till exempel FileInputStream används för att läsa från källan och FileOutputStream för att skriva till destinationen.
Exempel:
Javaimport java.io.*; public class GFG { public static void main(String[] args) throws IOException { // Initially assigning null ot objects for reading and writing to file FileInputStream sourceStream = null; FileOutputStream targetStream = null; try { // Passing the files via local directory sourceStream = new FileInputStream('/Users/mayanksolanki/Desktop/demo.rtf'); targetStream = new FileOutputStream('/Users/mayanksolanki/Desktop/democopy.rtf'); // Reading source file and writing content to file byte by byte int temp; // If there is content inside file than read while ((temp = sourceStream.read()) != -1) targetStream.write((byte)temp); System.out.print('Program successfully executed'); } // finally block that executes for sure where we are closing file connections to avoid memory leakage finally { if (sourceStream != null) sourceStream.close(); if (targetStream != null) targetStream.close(); } } }
Produktion:
Programmet har körts framgångsrikt
Character Stream vs Byte Stream Skillnader
| Aspekt | Karaktärsström | Byte Stream |
|---|---|---|
| Datatyp hanterad | 16-bitars Unicode-tecken (text) | 8-bitars rådata (binär) |
| Klasserna avslutas med | Läsare/skribent | InputStream / OutputStream |
| Lämplig för | Textfiler Unicode-data | Bilder ljud video binära filer |
| Omvandling | Konverterar byte till tecken automatiskt | Ingen konvertering fungerar med råbyte |
| Exempel | FileReader FileWriter | FileInputStream FileOutputStream |
Relaterad artikel
- Java IO - Input/Output i Java med exempel