Créer des données binaires de longueur variable en Java

Cet article

Ceci est un mémo qui a fait un programme Java qui convertit les données de longueur variable (avec code de saut de ligne) en données de longueur variable avec champ de longueur (LL) (sans code de saut de ligne).

Auto-introduction

Je développe principalement des applications web Java (Spring Boot).

Livrables

Le code source et les fichiers d'entrée peuvent être trouvés sur GitHub.

Contexte

――J'étais en charge du développement d'outils de migration de données pour un projet de migration hérité dans lequel j'étais impliqué dans mon travail.

Spécifications des données de test

--Fichier de données binaires de longueur variable avec champ de longueur (LL) 2 octets. ――Le contenu des données binaires peut être n'importe quoi.

Préparation du dossier matériel original

--Préparez un fichier texte de longueur variable UTF-8 comme matériau source.

Explication du code source

EditBinary.java


//Abréviation
    public static void main(String[] args) {
        // (1)
        BufferedReader br = null;
        BufferedOutputStream bos = null;
        int LLSIZE = 2; 

        try {
            br = new BufferedReader(new FileReader("input.txt"));
            bos = new BufferedOutputStream(new FileOutputStream("output.txt"));
            String line = null;
            // (2)
            while ((line = br.readLine()) != null) {
                int recSize = line.length();
                // (3)
                byte ll[] = ByteBuffer.allocate(LLSIZE).putShort((short)recSize).array();
                // (4)
                byte data[] = ByteBuffer.allocate(recSize).put(line.getBytes("UTF-8")).array();
                // (5)
                ByteBuffer lineBuf = ByteBuffer.allocate(LLSIZE + recSize);
                lineBuf.put(ll);
                lineBuf.put(data);
                // (6)
                bos.write(lineBuf.array());
            }
            bos.flush();
//Abréviation

Compiler et exécuter

La compilation et l'exécution sont simples.

--Compiler

javac EditBinary.java

--Exécuter

java EditBinary

Résultat d'exécution

Jetons un œil au contenu de output.txt avec "Hex Fiend". result.png Le code de saut de ligne à la fin de chaque enregistrement a été supprimé et remplacé par un LL au début. Vous pouvez voir que la valeur de LL est la suivante. Le nombre entre parenthèses est le nombre d'octets décimaux, c'est-à-dire la longueur de l'enregistrement.

--Premier enregistrement LL: 0x0064 (100) --Deuxième enregistrement LL: 0x00C8 (200)

Ainsi, j'ai pu créer des données binaires de longueur variable avec LL.

prime

Code de saut de ligne comme délimiteur

Je ne pense pas qu'il existe de nombreux cas où un code de saut de ligne est utilisé comme délimiteur pour les données binaires (je ne l'ai pas non plus utilisé dans cet article), mais si vous le faites, vous devez faire attention car la représentation binaire peut changer en fonction de l'environnement. C'est une histoire.

référence

Recommended Posts

Créer des données binaires de longueur variable en Java
Créer JSON en Java
Lire des fichiers binaires en Java 1
Importer des données Excel avec Java 2
Comment créer un URI de données (base64) en Java
Créer des fonctions Azure en Java
Importer des données Excel avec Java
Lire des fichiers binaires dans Java 2
Importer des données Excel avec Java 3
Afficher les données Firestore dans RecyclerView [Java]
Communication TCP (communication socket) en Java (ASCII, Binaire)
Créer un projet Java Spring Boot avec IntelliJ
Créer une application TODO dans Java 7 Créer un en-tête
variable de tableau java
Créer un CSR avec des informations étendues en Java
Partition en Java
[Kotlin] Passer le tableau Kotlin à l'argument de longueur variable Java [Java]
Essayez de créer un babillard en Java
Changements dans Java 11
À propos de var utilisé en Java (type de variable locale)
[Java] Utilisation de final dans la déclaration de variable locale
Janken à Java
Créons un framework Web ultra-simple avec Java
Portée de la variable Java (portée)
déclaration de variable java
Portée de la variable Java
Mémo organisé dans la tête (Java - type de données)
J'ai essayé de créer une compétence Alexa avec Java
Taux circonférentiel à Java
FizzBuzz en Java
Comment créer un environnement Java en seulement 3 secondes
Déclaration / initialisation de variable Java / type de données (distribution et promotion)
Vectoriser et imager les données d'images numériques manuscrites MNIST avec Java
J'ai essayé de créer une compétence Clova en Java
Créer la variable de clause where dans Spring Data JPA
[Android] La variable de liaison de données est écrite dans camelCase
Différences de code lors de l'utilisation du système de longueur en Java
Lire JSON en Java
Implémentation de l'interpréteur par Java
Faites un blackjack avec Java
Application Janken en Java
Programmation par contraintes en Java
Mettez java8 dans centos7
NVL-ish guy en Java
Joindre des tableaux en Java
"Hello World" en Java
Interface appelable en Java
[Java] Créer un filtre
Commentaires dans la source Java
Ruby: Créer des données CouchDB (Créer)
[Java] Type de données ①-Type de base
Fonctions Azure en Java
Formater XML en Java
Simple htmlspecialchars en Java
Comment utiliser les variables Java
Implémentation Boyer-Moore en Java
Hello World en Java
Utiliser OpenCV avec Java