Exemple d'analyse de flux de caractères Java
1. L'origine du flux de caractères
Comme il n'est pas très pratique d'utiliser un flux d'octets pour contrôler le chinois, Java fournit un flux de caractères pour contrôler le chinois
Principe d'implémentation : flux d'octets + table d'encodage
Pourquoi utiliser Is y a-t-il un problème lors de la copie de fichiers texte contenant des caractères chinois dans le flux d'octets ?
Parce que l'opération sous-jacente fusionnera automatiquement les octets en chinois
Comment identifier que l'octet est chinois ?
Lorsque des caractères chinois sont stockés, qu'il s'agisse d'UTF-8 ou de GBK, le premier octet est un nombre négatif à inviter
2. Table de codage
Jeu de caractères :
est un ensemble de tous les caractères pris en charge par le système, y compris les caractères nationaux, les signes de ponctuation, les symboles graphiques, les chiffres, etc.
Pour stocker et reconnaître avec précision divers symboles de jeux de caractères, un ordinateur a besoin d'un codage de caractères. Un ensemble de jeux de caractères doit avoir au moins un ensemble d'encodages de caractères
Caractère commun. les jeux incluent le jeu de caractères ASCII, le jeu de caractères GBXXX, le jeu de caractères Unicode, etc.
GBK : La table de codes chinois la plus couramment utilisée est une spécification étendue basée sur la norme GB2312. Elle utilise un schéma de codage à deux octets et contient un total de. 21 003 caractères chinois. Il est entièrement compatible avec la norme GB2312, il prend également en charge les caractères chinois traditionnels, les caractères chinois japonais et coréens, etc.
GB18030 : La dernière table de codes chinois, contenant 70 244 caractères chinois, utilisant un codage multi-octets, chaque caractère. peut être composé de 1, 2 ou 4 octets. Prend en charge les caractères des minorités ethniques chinoises, ainsi que les caractères chinois traditionnels, les caractères chinois japonais et coréens, etc.
Jeu de caractères Unicode :
Conçu pour exprimer n'importe quel caractère dans n'importe quelle langue, il s'agit d'un standard dans l'industrie, également connu comme Unicode et Standard Universal Code ; il utilise jusqu'à 4 octets de chiffres pour représenter chaque lettre, symbole ou texte. Il existe trois schémas d'encodage : UTF-8, UTF-16, UTF32. Le plus couramment utilisé est UTF-8
UTF-8 : il peut être utilisé pour représenter n'importe quel caractère de la norme Unicode. Il est utilisé pour le courrier électronique et le Web. pages et autres stockages ou transmissions. Dans les applications de fichiers, l'encodage est préféré. L'Internet Working Group exige que tous les protocoles Internet prennent en charge le format de codage UTF-8. Il utilise un à quatre octets pour encoder chaque caractère
Règles d'encodage UTF-8 :
128 caractères US-ASCII, n'ont besoin que d'un octet pour encoder
Caractères latins et autres, ont besoin de deux octets pour encoder
Caractères les plus couramment utilisés (y compris le chinois) sont codés sur trois octets
D'autres caractères auxiliaires UniCode rarement utilisés sont codés sur quatre octets
Résumé : quels types de règles sont utilisés lors de l'encodage et les règles correspondantes doivent être utilisées pour le décodage, sinon elles seront tronquées
3. Problèmes d'encodage et de décodage dans les chaînes
Méthode d'encodage (IDEA) :
byte[] getBytes() : utilisez le jeu de caractères par défaut de la plateforme pour encoder la chaîne en une série d'octets et convertir le résultat stocké dans un nouveau tableau d'octets
byte[] getBytes(String charsetName) : Utilisez le jeu de caractères spécifié pour encoder la chaîne dans une série d'octets et stockez le résultat dans un nouveau tableau d'octets
Méthode de décodage (IDEA) :
String( byte[]bytes) : construit une nouvelle chaîne en décodant le tableau d'octets spécifié à l'aide du jeu de caractères par défaut de la plateforme
String(byte[]bytes,String charsetName) : décodant le tableau d'octets spécifié à l'aide du jeu de caractères par défaut de la plateforme. Tableau d'octets à construire une nouvelle chaîne
Le format d'encodage par défaut dans IDEA est UTF-8
IV. Problèmes d'encodage et de décodage du flux de caractères
Classe de base abstraite du flux de caractères :
Lecteur : classe abstraite du flux d'entrée de caractères
Writer : classe abstraite de flux de sortie de caractères
Deux classes liées aux problèmes d'encodage et de décodage dans le flux de caractères :
InputStreamReader : il s'agit d'un pont entre le flux d'octets et le flux de caractères : il lit les octets et utilise le jeu de caractères spécifié pour le décoder en caractères. Le jeu de caractères qu'il utilise peut être spécifié par son nom, peut être spécifié explicitement ou peut accepter le jeu de caractères par défaut de la plate-forme
Méthode Constructor :
InputStreamReader(InputStream in) | Créer un InputStreamReader qui utilise le jeu de caractères par défaut . |
InputStreamReader(InputStream in, String charsetName) | Crée un InputStreamReader qui utilise un jeu de caractères nommé. |
OutputStreamWruter : C'est un pont entre le flux de caractères et le flux d'octets : il utilise un jeu de caractères personnalisé pour coder les caractères écrits en octets. Le jeu de caractères qu'il utilise peut être spécifié par son nom ou explicitement spécifié. jeu de caractères par défaut de la plateforme
Méthode de construction :
OutputStreamWriter(OutputStream out) | Créez un OutputStreamWriter en utilisant l'encodage de caractères par défaut. |
OutputStreamWriter(OutputStream out, String charsetName) | Créez un OutputStreamWriter qui utilise un jeu de caractères nommé. |
public class ConversionStreamDemo { public static void main(String[] args) throws IOException { //创建一个默认编码格式的InputStreamReader\OutputStreamWriter InputStreamReader ipsr = new InputStreamReader(new FileInputStream("E:\\abc.txt")); OutputStreamWriter opsw = new OutputStreamWriter(new FileOutputStream("E:\\abc.txt")); //写入数据 opsw.write("你好啊"); opsw.close(); //读数据,方式一:一次读取一个字节数据 int ch; while ((ch = ipsr.read()) != -1) { System.out.print((char) ch); } ipsr.close(); } }
四、字符流写数据的五种方法
方法名 | 说明 |
void write(int c) | 写一个字符 |
void write(char[] cbuf) | 写入一个字符数组 |
void write(char[] cbuf,int off,int len) | 写入字符数组的一部分 |
void write(String str) | 写入一个字符串 |
void write(String str,int off,int len) | 写入一个字符串的一部分 |
字符流写数据需要注意缓冲区的问题,如果想要将缓冲区的数据加载出来需要在写入方法后加上刷新方法flush();
前三个方法与字节流写入方法使用相同,这里重点介绍下面两种方式
public class OutputStreamWriterDemo { public static void main(String[] args) throws IOException { //创建一个默认编码格式的OutputStreamWriter对象 OutputStreamWriter opsw=new OutputStreamWriter(new FileOutputStream("E:\\abc.txt")); //方式一:写入一个字节 opsw.write(97); opsw.flush();//如果需要在文件中立即显示输入的数据,就需要加入刷新方法 //方式二:写入一个字符数组 char[]ch={'a','b','c','二'}; opsw.write(ch); opsw.flush();//如果需要在文件中立即显示输入的数据,就需要加入刷新方法 //方式三:写入一个字符数组的一部分 opsw.write(ch,0,2); opsw.flush();//如果需要在文件中立即显示输入的数据,就需要加入刷新方法 //方式四:写入一个字符串 opsw.write("一二三"); opsw.flush();//如果需要在文件中立即显示输入的数据,就需要加入刷新方法 //方式五:写入一个字符串的一部分 opsw.write("三四五",1,2); opsw.flush();//如果需要在文件中立即显示输入的数据,就需要加入刷新方法 } }
五、字符流读数据的两种方法
方法名 | 说明 |
int read() | 一次读取一个字符数据 |
int read(char[] cbuf) | 一次读取一个字符数组数据 |
public class InputStreamReadDemo { public static void main(String[] args) throws IOException { //创建一个默认编码格式的InputStreamReader InputStreamReader ipsr=new InputStreamReader(new FileInputStream("E:\\abc.txt")); //读取数据,方式一一次读取一个字符数据 int ch; while ((ch=ipsr.read())!=-1){ System.out.print((char) ch); } ipsr.close(); //方式二:一次读取一个字符数组数据 char []ch=new char[1024]; int len; while ((len=ipsr.read(ch))!=-1){ System.out.print(new String(ch,0,len)); } ipsr.close(); } }
小结:如果使用默认编码格式的话,那么字符输入流InputStreamReader可以使用子类FileReader来替代,字符输出流OutputStreamWriter可以使用其子类FileWriter来替代,两者在使用默认编码格式的情况下作用一致。
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Guide du générateur de nombres aléatoires en Java. Nous discutons ici des fonctions en Java avec des exemples et de deux générateurs différents avec d'autres exemples.

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.

Java est un langage de programmation populaire qui peut être appris aussi bien par les développeurs débutants que par les développeurs expérimentés. Ce didacticiel commence par les concepts de base et progresse vers des sujets avancés. Après avoir installé le kit de développement Java, vous pouvez vous entraîner à la programmation en créant un simple programme « Hello, World ! ». Une fois que vous avez compris le code, utilisez l'invite de commande pour compiler et exécuter le programme, et « Hello, World ! » s'affichera sur la console. L'apprentissage de Java commence votre parcours de programmation et, à mesure que votre maîtrise s'approfondit, vous pouvez créer des applications plus complexes.
