IO Stream
Em Java, os fluxos de IO são divididos em dois tipos: fluxos de bytes e fluxos de caracteres. Como o nome sugere, os fluxos de bytes são lidos e escritos de acordo com bytes, e os personagens são acessados de acordo com os personagens; A leitura de arquivos comumente usada é o fluxo de caracteres e os fluxos de bytes são usados na comunicação de rede.
A figura a seguir é a estrutura geral dos fluxos de IO em Java:
Fluxo de bytes
Em Java, os fluxos de bytes geralmente terminam com fluxos. O fluxo de bytes de entrada é chamado de entrada de entrada e o fluxo de bytes de saída é chamado de saída de saída; InputStream e OutputStream são superclasses representando todas as classes de sua entrada/saída e são classes abstratas (resumo)
Os fluxos de bytes comumente usados são:
1.FileInputStream/FileOutputStream2.BufferedInputStream/bufferoudOutputStream3.SevenceInputStream (fluxo de sequência) 4.ObjectInputStream/ObjectOutStream (entrada do objeto e fluxo de saída) 5.PrintStream (Print Stream)
Fluxo de caracteres
Em Java, o fluxo de caracteres de entrada termina com o leitor e o fluxo de caracteres de saída termina com o Writer. Por exemplo, nosso FileReader e FileWriter comuns são fluxos de caracteres, e o leitor e o Witer são superclasses dos fluxos de caracteres de entrada/saída e também são classes abstratas.
Os fluxos de caracteres comumente usados são:
1.FileReader/FileWriter2.BufferedReader/bufferwriter3.inputstremreader/outputStreamWriter (Convert Stream)
Converter fluxo
Um fluxo de conversão é uma classe que converte um fluxo de bytes em um fluxo de caracteres e há dois tipos:
・ InputStreamReader ・ OutputStreamWriter
O InputStreamReader é um fluxo de caracteres (leitor), que requer embrulhar um fluxo de bytes (InputStream);
O outputStreamWriter é um fluxo de caracteres (escritor) e precisa embrulhar um fluxo de bytes (outputStream)
Decorar
O objetivo da embalagem é adicionar novas funções com base no objeto original. Por exemplo, o BufferredReader envolve um leitor, que é na verdade um aprimoramento da função do leitor; O leitor original só pode ser lido por um caractere e um caractere, e o BufferredReader formado após a embalagem tem uma nova função: a função de ler diretamente uma linha (readline). Intuitivamente falando, este é o chamado decorar.
Em termos de modo de design, este é um modo decorativo típico, e suas características são:
1. Objetos decorativos e objetos reais têm a mesma interface. Dessa forma, o objeto cliente pode interagir com o objeto decorativo da mesma maneira que o objeto real. 2. O objeto decorativo pode adicionar algumas funções adicionais antes ou depois de encaminhar essas solicitações. Isso garante que, durante o tempo de execução, funções adicionais possam ser adicionadas externamente sem modificar a estrutura do objeto especificado.
Correspondentes a nós é que o BufferredReader e o Reader são os dois leitores. Após a embalagem, a função BufferredReader é aprimorada, mas ainda pode ser usada como leitores (a referência da classe pai da OO pode apontar para subclasses)
exemplo
Exemplo de fluxo de bytes
Corte o arquivo mp3 em várias cópias e recombine -o
pacote cn.xdian.test; importar java.io.file; importar java.io.fileInputStream; importar java.io.fileOutputStream; importar java.io.ioException; importação java.io.sequenceIntectStream; import java.util.Umumeration; importação; lança ioexception {cutfile (); // Corte o arquivo mp3 Mergeflile (); // Merge arquivos mp3} // Mesclar mp3Public static void Mergeflile () lança ioexception {file dir = new File ("/home/gavinzhou/music_test"); //cret all -mp3 Vector <FileInputStream> (); arquivo [] arquivos = DIR.ListFiles (); para (arquivo de arquivo: arquivos) {if (file.getName (). endswith (". mp3")) {vector.add (new FileInputStream (file));}} // Obtenha o iterador por meio de sequestring/sefusteNput <FileInputStream> e = vector.Elements (); FileOutputStream fileOutputStream = new FileOutputStream ("/home/gavinzhou/conbine.mp3"); // leia o arquivo mp3 split byte [] buf = new byte [1024]; integr lengtput = 0; while (length = inputStream.Read (BUF)! =-1) {FileUr. fileOutputStream.close (); inputStream.close ();} // corte mp3public static void cutfile () lança ioexception {arquivo file = new File ("/home/gavinzhou/test.mp3"); arquivo de arquivo = novo ("/"/gavinzinHou/music_test "; FileInputStream (arquivo); // Leia o arquivo byte [] buf = new Byte [1024*1024]; int length = 0; para (int i = 0; (length = FileInputStream.read (BUF))! Arquivo (dir, "parte"+i+". Mp3")); fileOutputStream.Write (buf, 0, comprimento); FileOutputStream.close ();} // fechar o Stream FileInputStream.close ();}}Exemplo de fluxo de personagens
Copiar arquivo A para o arquivo B
pacote cn.xidian.test; importar java.io.bufferedreader; importar java.io.bufferedwriter; importar java.io.file; importar java.io.fileReader; import java.io.fileWriter; import java.io.ioException; public Class Demo1 {stain maidra Arquivo ("/home/gavinzhou/a.txt"); arquivo desfile = new File ("/home/gavinzhou/b.txt"); // Crie o fluxo de entrada de fluxo BufferReader input = new) BufferReader/sArtHerTer (o fileReaderTerader (the SootFile); linha = nulo; while ((line = input.readline ())! = null) {output.Write (line); output.Newline ();} // Fechar o fluxo de entrada e saída input.close (); output.close ();}}}Exemplo de fluxo de impressão
pacote cn.xidian.test; importar java.io.file; importar java.io.fileOutputStream; importar java.io.ioException; importar java.io.printstream;*o fluxo de impressão pode imprimir qualquer tipo de dados. Antes de imprimir os dados, os dados serão convertidos em uma string e depois impressos*/class Animal {Nome da String; cor da sequência; Public Animal (Nome da String, cor de cordas) {this.name = name; this.color = color;}@substituindo string string tostring () {return name: "+ this.name+" color: "+ this.color; lança ioexception {/* arquivo file = novo arquivo ("/home/gavinzhou/a.txt"); // Crie um fluxo de impressão PrintStream PrintStream = new PrintStream (arquivo); // imprima qualquer informação no arquivo printstream.println (97); printStream.println (3.14); printstream.println ('a'); printStream.println (true); Animal a = novo animal ("rato", "preto"); printStream.println (a); // altera o sistema de entrada e saída padrão.Setout (PrintStream); // saída padrão é para o sistema de tela.out.println ("teste ...."); */// Coleção de informações de log de exceção. Arquivo logFile = novo arquivo ("/home/gavinzhou/test.log"); printStream LogPrintStream = new PrintStream (new FileOutputStream (logfile, true)); tente {int c = 4/0; // crie um sistema de exceção.out.println ("c ="+c); int []. e) {E.PrintStackTrace (LogPrintStream); // Saída para arquivo em vez de na tela}}}}Resumir
O exposto acima é sobre análise de fluxos de IO e exemplos de código em Java. Espero que seja útil para todos. Amigos interessados podem continuar se referindo a este site:
Exploração de Java: Exemplos de código criptografados e descriptografados de thread+arquivos IO
Análise de código de conhecimento relacionado ao fluxo Java IO
Interpretação detalhada do rio Java IO
Se houver alguma falha, deixe uma mensagem para apontá -la. Obrigado amigos pelo seu apoio para este site!