JavaRush /Java Blog /Random-TK /Java-da I / O. Synplar FileInputStream, FileOutputStream,...

Java-da I / O. Synplar FileInputStream, FileOutputStream, BufferedInputStream

Toparda çap edildi
Salam! Şu günki leksiýamyzda Java-da giriş we çykyş akymlary ýa-da gysgaça Java I / O (“giriş-çykyş”) baradaky söhbetdeşligi dowam etdireris . Bu mowzuk boýunça ilkinji leksiýa däl we iň soňky bolmaz :) Diňe bir dil hökmünde Java giriş / çykyş bilen işlemek üçin köp mümkinçilik döredýär. Bu funksiýany durmuşa geçirýän synplar gaty köp, şonuň üçin ilki başda bulaşmazlyk üçin olary birnäçe leksiýa böldük :) Java-da I / O.  Synplar FileInputStream, FileOutputStream, BufferedInputStream - 1Öňki leksiýalarda BufferedReader , şeýle hem InputStream & OutputStream we abstrakt sapaklar barada durup geçdik. nesilleri. Bu gün 3 sany täze synpa serederis: FileInputStream , FileOutputStream we BufferedInputStream .

FileOutputStream synpy

FileOutputStream synpynyň esasy maksady bir faýla baýt ýazmakdyr. Çylşyrymly zat ýok :) FileOutputStream abstrakt OutputStream synpynyň durmuşa geçirişlerinden biridir . Konstruktorda bu synpyň obýektleri ýa-da nyşan faýlyna (baýt ýazylmaly) ýa-da synpyň obýektine gidýär File. Iki mysala seredeliň:
public class Main {

   public static void main(String[] args) throws IOException {


       File file = new File("C:\\Users\\Username\\Desktop\\test.txt");
       FileOutputStream fileOutputStream = new FileOutputStream(file);

       String greetings = "Hi! Welcome to JavaRush - the best site for those who want to become a programmer!";

       fileOutputStream.write(greetings.getBytes());

       fileOutputStream.close();
   }
}
Obýekt döredilende, Filekonstruktoryň nirede bolmalydygyny kesgitledik. Öňünden döretmegiň zerurlygy ýok: eger ýok bolsa, programma ony özi döreder. Goşmaça obýekt döretmezden edip bilersiňiz we diňe salgy bilen bir setir geçirip bilersiňiz:
public class Main {

   public static void main(String[] args) throws IOException {


       FileOutputStream fileOutputStream = new FileOutputStream("C:\\Users\\Username\\Desktop\\test.txt");

       String greetings = "Hi! Welcome to JavaRush - the best site for those who want to become a programmer!";

       fileOutputStream.write(greetings.getBytes());

       fileOutputStream.close();
   }
}
Iki ýagdaýda-da netije birmeňzeş bolar. Faýlymyzy açyp, şol ýerde görüp bileris:

Hello! Добро пожаловать на JavaRush — лучший сайт для тех, кто хочет стать программистом!
Şeýle-de bolsa, bu ýerde bir gowak bar. Aboveokardaky mysaldan kody yzly-yzyna birnäçe gezek işledip görüň, soňra faýla serediň we soraga jogap beriň: içinde näçe setir ýazylandygyny görýärsiňizmi? Diňe bir. Theöne kody birnäçe gezek işlediň. Şeýle-de bolsa, maglumatlaryň köne maglumatlary çalşyp, her gezek gaýtadan ýazylandygy ýüze çykýar. Munuň bilen kanagatlanmasak we yzygiderli ýazga mätäç bolsak näme etmeli? Salamlarymyzy bir faýla yzly-yzyna üç gezek ýazmak islesek näme etmeli? Bu ýerde hemme zat ýönekeý. Diliň özi her ýagdaýda haýsy gylyk-häsiýetiň gerekdigini bilip bilmeýänligi sebäpli, FileOutputStreamkonstruktora goşmaça parametr geçirip bilersiňiz - boolean append. Onuň bahasy dogry bolsa , maglumatlar faýlyň ahyryna ýazylar. Falsealňyş bolsa (we asyl bahasy ýalňyş bolsa ), köne maglumatlar öçüriler we täze maglumatlar ýazylar. Üýtgedilen kodumyzy üç gezek synap göreliň:
public class Main {

   public static void main(String[] args) throws IOException {


       FileOutputStream fileOutputStream = new FileOutputStream("C:\\Users\\Username\\Desktop\\test.txt", true);

       String greetings = "Hi! Welcome to JavaRush - the best site for those who want to become a programmer!\r\n";

       fileOutputStream.write(greetings.getBytes());

       fileOutputStream.close();
   }
}
Netije:

Hello! Добро пожаловать на JavaRush - лучший сайт для тех, кто хочет стать программистом!
Hello! Добро пожаловать на JavaRush - лучший сайт для тех, кто хочет стать программистом!
Hello! Добро пожаловать на JavaRush - лучший сайт для тех, кто хочет стать программистом!
Başga bir zat! I / O sapaklaryny ulananyňyzda bu aýratynlygy ýatda saklaň. Bir wagtlar köne maglumatlarymyň faýllardan nirä gidenine düşünmek üçin birnäçe sagatlap oturmaly bolýardym :) Elbetde, beýleki I / O synplarynda bolşy ýaly, çeşmeleriň üsti bilen goýbermegi ýatdan çykarmaň close().

FileInputStream synpy

Synpyň FileInputStreamters maksady bar - faýldan baýt okamak. FileOutputStreamMiras ýaly OutputStream, bu synp abstrakt synpdan alýar InputStream. “ Test.txt ” tekstimize birnäçe setir tekst ýazalyň:

«So close no matter how far
Couldn't be much more from the heart
Forever trusting who we are
And nothing else matters»
Java-da I / O.  Synplar FileInputStream, FileOutputStream, BufferedInputStream - 2 Faýldan maglumatlary okamagyň ýerine ýetirilişi şu FileInputStream:
public class Main {

   public static void main(String[] args) throws IOException {

       FileInputStream fileInputStream = new FileInputStream("C:\\Users\\Username\\Desktop\\test.txt");

       int i;

       while((i=fileInputStream.read())!= -1){

           System.out.print((char)i);
       }
   }
}
Faýldan bir baýt okaýarys, okalýan baýtlary nyşanlara öwürýäris we konsola çykarýarys. Ine, konsolyň netijesi:

So close no matter how far
Couldn't be much more from the heart
Forever trusting who we are
And nothing else matters

BufferedInputStream synpy

Öňki leksiýalardan alnan bilimleri göz öňünde tutup, synpyň näme üçin zerurdygyny BufferedInputStreamwe haýsy artykmaçlyklarynyň bardygyny aňsatlyk bilen aýdyp bilersiňiz FileInputStream:) Biz eýýäm buferlenen akymlar bilen duşuşdyk, şonuň üçin okamagy dowam etdirmezden ozal çaklamaga synanyşyň :) Buferli akymlar ilki bilen I / O-ny optimizirlemek üçin zerurdyr. Faýldan okamak ýaly maglumat çeşmesine girmek, öndürijilikli iş. Her gezek bir baýt okamak üçin faýla girmek isripdir. Şonuň üçin BufferedInputStreammaglumatlary bir gezekde bir baýt däl-de, bloklarda okaýar we wagtlaýynça ýörite buferde saklaýar. Bu, faýla giriş sanyny azaltmak arkaly programmanyň işini optimizirlemäge mümkinçilik berýär. Görnüşine seredeliň:
public class Main {

   public static void main(String[] args) throws IOException {

       FileInputStream fileInputStream = new FileInputStream("C:\\Users\\Username\\Desktop\\test.txt");

       BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream, 200);

       int i;

       while((i = bufferedInputStream.read())!= -1){

           System.out.print((char)i);
       }
   }
}
Bu ýerde bir obýekt döretdik BufferedInputStream. Bir obýekti ýa-da mirasdüşerleriniň haýsydyr birini giriş hökmünde kabul edýär InputStream, şonuň üçin öňküsi FileInputStreamkabul eder. Bufer ölçegini goşmaça parametr hökmünde baýtda alýar. Indi munuň netijesinde maglumatlar faýldan bir gezekde bir baýt däl-de, bir gezekde 200 okalar! Faýl girişleriniň sanyny näçe azaldandygymyzy göz öňüne getiriň. Öndürijiligi deňeşdirmek üçin birnäçe megabaýt ululykdaky uly tekst faýly alyp, ony okamagyň we millisekuntda konsolda näçe wagt gerekdigini deňeşdirip FileInputStreambilersiňiz BufferedInputStream. Ine, koduň iki mysaly:
public class Main {

   public static void main(String[] args) throws IOException {

       Date date = new Date();

       FileInputStream fileInputStream = new FileInputStream("C:\\Users\\Username\\Desktop\\textBook.rtf");

       BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);

       int i;

       while((i = bufferedInputStream.read())!= -1){

           System.out.print((char)i);
       }

       Date date1 = new Date();

       System.out.println((date1.getTime() - date.getTime()));
   }
}



public class Main {

   public static void main(String[] args) throws IOException {

       Date date = new Date();

       FileInputStream fileInputStream = new FileInputStream("C:\\Users\\Username\\Desktop\\26951280.rtf");


       int i;

       while((i = fileInputStream.read())!= -1){

           System.out.print((char)i);
       }

       Date date1 = new Date();

       System.out.println((date1.getTime() - date.getTime()));
   }
}
Kompýuterimde 1.5 MB faýly okanymda, FileInputStreambu işi 3500 millisekuntda ýerine ýetirdi, ýöne bu ýerde BufferedInputStreambu işi 1700 millisekuntda ýerine ýetirdi. Görşüňiz ýaly, buferlenen akym programmanyň işini 2 esse optimallaşdyrdy! :) I / O sapaklaryny öwrenmegi dowam etdireris - soňrak görüşeris!
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION