Maison  >  Article  >  Java  >  À propos des flux d'E/S en Java : relations d'héritage de flux, flux de traitement et flux de conversion

À propos des flux d'E/S en Java : relations d'héritage de flux, flux de traitement et flux de conversion

php是最好的语言
php是最好的语言original
2018-08-04 14:29:241913parcourir

1. La relation d'héritage des flux, ainsi que des flux d'octets et des flux de caractères.

2. Flux de nœuds FileOutputStream et FileInputStream et traitement des flux BufferedInputStream et BufferedOutputStream. Et les FileOutputWriter, FileInputReader, BufferedInputReader, BufferedOutputWriter correspondants.

3. Convertir les flux InputStreamReader et OutputStreamWriter

1 : Relation d'héritage des flux

Flux d'octets

Flux de caractères

Utiliser la portée du flux de caractères et du flux d'octets : le flux d'octets est généralement utilisé pour traiter des images, des vidéos et des fichiers de type PPT et Word. Les flux de caractères sont généralement utilisés pour traiter des fichiers en texte brut, tels que les fichiers TXT, etc. Les flux d'octets peuvent être utilisés pour traiter des fichiers en texte brut, mais les flux de caractères ne peuvent pas être utilisés pour traiter des fichiers non textuels tels que des images et des vidéos.

Deux : traitement des flux BufferedReader, BufferedWriter, BufferedInputStream

BufferedOutputsStream, tous doivent inclure le flux de nœud de couche supérieure. En d'autres termes, le flux de traitement est basé sur le flux de nœuds. Le flux avec Buffered est également appelé flux tamponné. Le flux tamponné traite l'entrée et la sortie des fichiers le plus rapidement. Par conséquent, les flux mis en mémoire tampon sont généralement utilisés plus fréquemment.

Voici deux exemples simples de copie de fichiers :

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

public class MycopyTest {

  public static void main(String[] args) {

    File src = new File("D:/1.jpg");

    // D:/1.jpg必须的存在不然会报错

    File dest = new File("D:/2.jpg");

    // 如果D:/2.jpg存在则覆盖,如果不存在则新建

    streamCopy(src, dest);

  }

private static void readCopy(File src,File dest)


  {

    FileReader fr=null;

    FileWriter fw=null;

    BufferedReader br=null;

    BufferedWriter bw=null;

    try {

      fr=new FileReader(src);

      fw=new FileWriter(dest);

      br=new BufferedReader(fr);

      bw=new BufferedWriter(fw);

      String str;

      while((str=br.readLine())!=null)

      {

        bw.write(str);

        bw.newLine();

      }

    }catch (IOException e) {

      // TODO Auto-generated catch block

      e.printStackTrace();

    }

    try {

      bw.close();

      br.close();

    } catch (IOException e) {

      // TODO Auto-generated catch block

      e.printStackTrace();

    }

 

  }

  private static void streamCopy(File src, File dest) {

    FileInputStream fis = null;

    FileOutputStream fos = null;

    BufferedInputStream bis = null;

    BufferedOutputStream bos = null;

    try {

      fis = new FileInputStream(src);

      fos = new FileOutputStream(dest);

      bis = new BufferedInputStream(fis);

      bos = new BufferedOutputStream(fos);

      int len;

      byte[] b = new byte[1024];

      while ((len = bis.read(b)) != -1) {

        bos.write(b, 0, len);

        // bos.write(b,0,len);是把读到数组的大小字节写入

        // bos.write(b);最后一次如果数组未写满的话就会多读。

      }

    } catch (IOException e) {

      // TODO Auto-generated catch block

      e.printStackTrace();

    }

    try {

      bos.close();

      bis.close();

    } catch (Exception e) {

      // TODO Auto-generated catch block

      e.printStackTrace();

    }

  }

}

Trois : Flux de conversion InputStreamReader et OutputStreamWriter

Le rôle de flux de conversion, lorsque le fichier texte est stocké sous forme de flux d'octets sur le disque dur, après lecture via InputStreamReader, il est converti en flux de caractères pour traitement par le programme. Le flux de caractères traité par le programme est converti en flux d'octets via OutputStreamWriter et enregistré.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

public class InputStreamWriterTest {

  public static void main(String[] args) {

    File src = new File("D:/Files/狗屁.txt");

    File dest = new File("D:/Files/斯密斯.txt");

    BufferedWriter bw = null;

    BufferedReader br = null;

    FileInputStream fis = null;

    FileOutputStream fos = null;

    try {

      fis = new FileInputStream(src);

      fos = new FileOutputStream(dest);

      InputStreamReader ir = new InputStreamReader(fis, "GBK");

      OutputStreamWriter ow = new OutputStreamWriter(fos, "GBK");

      bw = new BufferedWriter(ow);

      br = new BufferedReader(ir);

      String str;

      while ((str = br.readLine()) != null) {

        bw.write(str);

        bw.newLine();

        bw.flush();

      }

    } catch (IOException e) {

      e.printStackTrace();

    }

    try {

      bw.close();

      br.close();

    } catch (IOException e) {

      e.printStackTrace();

    }

  }

}

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
public class InputStreamWriterTest { public static void main(String[] args) { Fichier src = nouveau Fichier("D:/Files/Shit.txt" ); Fichier dest = nouveau Fichier("D:/Files/Smith.txt " ); BufferedWriter bw = null; BufferedReader br = null; FileInputStream fis = null; FileOutputStream fos = null; essayez { fis = nouveau FileInputStream(src); fos = nouveau FileOutputStream(dest); InputStreamReader ir = nouveau InputStreamReader(fis, "GBK"); OutputStreamWriter ow = nouveau OutputStreamWriter(fos, "GBK"); bw = nouveau BufferedWriter(ow); br = nouveau BufferedReader(ir); Chaîne str; while ((str = br.readLine()) != null) { bw.write(str); bw.newLine(); bw.flush(); } } catch (IOException e) { e.printStackTrace(); } essayez { bw.close(); br.close(); } catch (IOException e) { e.printStackTrace(); } } }

Articles connexes :

Utilisation du flux de sortie OutputString() du flux Java IO

Une introduction complète au flux IO en Java

Vidéos associées :

Le dernier didacticiel vidéo complet Java, didacticiel vidéo en ligne gratuit

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn