Este artigo descreve as diferenças e o uso dos fluxos de caracteres Java e fluxos de bytes. Compartilhe -o para sua referência, como segue:
A principal diferença entre fluxos de bytes e fluxos de caracteres é o método de processamento deles
Classificação de fluxo:
1. Stream de byte de Java
O InputStream é o ancestral de todos os fluxos de entrada de bytes, enquanto o outputStream é o ancestral de todos os fluxos de saída de bytes.
2. Stream de caracteres Java
O leitor é o ancestral de todos os fluxos de entrada de string de leitura, enquanto o escritor é o ancestral de todas as seqüências de saída.
InputStream, OutputStream, Reader e Writer são todas as classes abstratas. Então você não pode apenas novo
Os fluxos de bytes são os mais básicos. Todas as subclasses do InputStream e do OutputStream são usadas principalmente para processar dados binários. Eles são processados por bytes, mas, na realidade, muitos dados são texto. O conceito de fluxos de caráter é proposto. Eles são processados de acordo com a codificação da máquina virtual, ou seja, para converter os conjuntos de caracteres. Os dois estão relacionados através do InputStreamReader e do OutputStreamWriter, e estão realmente relacionados através do byte [] e String.
Os problemas de caracteres chineses que surgem no desenvolvimento real são realmente causados por conversão inconsistente entre fluxos de caracteres e fluxos de bytes.
Ao converter do fluxo de bytes em fluxo de caracteres, é na verdade quando o byte [] é convertido em string.
public string (byte bytes [], string charsetName)
Existe uma codificação de conjunto de caracteres de parâmetro -chave, que geralmente omitimos, então o sistema usa o sistema operacional Lang
Quando um fluxo de caracteres é convertido em um fluxo de bytes, é realmente quando uma string é convertida em byte [],
byte [] string.getbytes (string charsetName)
O mesmo vale para muitos outros fluxos em java.io, principalmente para melhorar o desempenho e usar a conveniência.
Como: bufferingInputStream, PipedInputStream, etc.
Implementação específica
Byte stream fileInputStream FileOutputStream
FilleReader FileWriter de streaming de caracteres
A unidade de processamento de fluxo de caracteres é de 2 caracteres de Unicode, que opera caracteres, matrizes de caracteres ou strings, respectivamente, enquanto a unidade de processamento de fluxo de bytes é 1 byte, que opera matrizes de byte e bytes. Portanto, o fluxo de caracteres é composto por uma máquina virtual Java convertendo bytes em 2 bytes de caracteres Unicode, por isso é mais favorável a vários idiomas! Se for um arquivo de áudio, imagem ou música, use o streaming de bytes e, se estiver relacionado ao chinês (texto), use o streaming de caracteres.
Todos os arquivos são armazenados em bytes. O que é retido no disco não são os caracteres do arquivo, mas os caracteres são codificados primeiro em bytes e, em seguida, os bytes são armazenados no disco. Ao ler arquivos (especialmente arquivos de texto), eles também são lidos por byte para formar uma sequência de bytes.
Um fluxo de bytes pode ser usado para qualquer tipo de objeto, incluindo objetos binários, enquanto um fluxo de caracteres só pode processar caracteres ou strings; 2. Um fluxo de bytes fornece a função de lidar com qualquer tipo de operação de IO, mas não pode processar diretamente os caracteres Unicode, enquanto um fluxo de caracteres pode fazê -lo.
Os fluxos de bytes podem ser convertidos em fluxos de caracteres usando o InputSteamReader OutputStreamWriter
Converter para BufferDreader BufferWriter, eles têm buffers, por exemplo: Leia arquivos da entrada de fluxo de bytes para a entrada do fluxo de caracteres Defina um fluxo de bytes:
FileInputStream fileInputStream = new FileInputStream ("d: /text.txt"); // Definir um fluxo de byte apontando para d: /text.txt inputStreamReader inputStreamReader = new inputStreamReaderReader (FileInputStream); // convertertreadReaderReaderBufferBenheDReaderReader (FileInputStream); // convertertreaderReaderReaderBenheDReaderReader (FileIrtStream); InputStreamReader converte para o BufferErader com cacheVocê pode atribuir o conteúdo de leitura aos caracteres
String ss = new string (); string s; while ((s = buffarredreader.readline ())! = Null) {ss += s;} fileInputStream fileInputStream = new FileInputStream ("d: /text.txt"); // Defina um fluxo de bytes apontando para d: /text.txt inputStreamReader inputStreamReader = new InputStreamReader (FileInputStream); // Converta o fluxo de bytes em InputStreamReader bufferReader bufferReader = new BufferredReader (inputSteamReader); // InputStreamReader é convertido em um leitor de buffer com cache. Você pode atribuir o conteúdo de leitura à string string ss = new String (); Strings s; while ((s = bufferredreader.readline ())! = null) {ss += s; }Por exemplo: Escreva um arquivo do fluxo de bytes para a saída do fluxo de caracteres
FileOutputStream fileOutputStream = new FileOutputStream ("d: /text.txt"); // Defina um arquivo apontando para d: /text.txt outputStreamWriter OutputStreamWriter = new O outputStreamWriter (FileOuttutStream); bufferwriterwriter = novo Bufferwriter (outputStreamWriter); bufferwriter.write (s); bufferwriter.close (); outputStreamWriter.Close (); FileOutputStream fileOutputStream = new FileOutputStream ("d: /text.txt"); // Defina um arquivo apontando para d: /text.txt outputStreamWriter outputStreamWriter = new OutputStreamWriter (FileOutputStream); bufferwriter bufferwriter = new bufferwriter (outputStreamWriter); bufferwriter.write (s); bufferWriter.close.););Rotina:
Converter strings em fluxos de bytes#Região converte strings em fluxos de bytes
/*] System.io.binaryWriter binaryWriter = new System.io.binaryWriter (MemoryStream); binarywriter.write (strsource); BYTE [] buffer = MemoryStream.getBuffer (); retornar buffer;}#endregion
Converter fluxos de bytes em strings #Region Converter fluxos de bytes em strings
/*] System.io.Memorystream (Bytdata); System.io.binaryReader binaryReader = new System.io.BinaryReader (MemoryStream2); string s2 = binaryReader.readString (); retornar S2;}#endregion
Espero que este artigo seja útil para a programação Java de todos.