Erstellen Sie Binärdaten variabler Länge in Java

Dieser Beitrag

Dies ist ein Memo, das ein Java-Programm erstellt hat, das Daten variabler Länge (mit Zeilenvorschubcode) in Daten variabler Länge mit Längenfeld (LL) (ohne Zeilenvorschubcode) konvertiert.

Vorstellen

Ich entwickle hauptsächlich Java-Webanwendungen (Spring Boot).

Ergebnisse

Der Quellcode und die Eingabedateien finden Sie unter GitHub.

Hintergrund

――Ich war für die Entwicklung des Datenmigrations-Tools für ein Legacy-Migrationsprojekt verantwortlich, an dem ich an meiner Arbeit beteiligt war.

Testdaten Spezifikationen

Vorbereitung der Originalmaterialdatei

Erklärung des Quellcodes

EditBinary.java


//Abkürzung
    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();
//Abkürzung

Kompilieren und ausführen

Das Kompilieren und Ausführen ist einfach.

--Kompilieren

javac EditBinary.java

--Ausführen

java EditBinary

Ausführungsergebnis

Werfen wir einen Blick auf den Inhalt von output.txt mit "Hex Fiend". result.png Der Zeilenvorschubcode am Ende jedes Datensatzes wurde entfernt und am Anfang durch einen LL ersetzt. Sie können sehen, dass der Wert von LL wie folgt ist. Die Zahl in Klammern ist die Anzahl der Dezimalbytes, dh die Datensatzlänge.

So konnte ich mit LL Binärdaten variabler Länge erstellen.

Bonus

Zeilenvorschubcode als Trennzeichen

――Ich glaube nicht, dass es viele Fälle gibt, in denen ein Zeilenvorschubcode als Trennzeichen für Binärdaten verwendet wird (ich habe ihn auch in diesem Artikel nicht verwendet), aber wenn Sie dies tun, müssen Sie vorsichtig sein, da sich die Binärdarstellung je nach Umgebung ändern kann. Es ist eine Geschichte.

Referenz

Recommended Posts

Erstellen Sie Binärdaten variabler Länge in Java
Erstellen Sie JSON in Java
Lesen Sie Binärdateien in Java 1
Importieren Sie Excel-Daten mit Java 2
So erstellen Sie einen Daten-URI (base64) in Java
Erstellen Sie Azure-Funktionen in Java
Importieren Sie Excel-Daten mit Java
Lesen Sie Binärdateien in Java 2
Importieren Sie Excel-Daten mit Java 3
Firestore-Daten in RecyclerView [Java] anzeigen
TCP-Kommunikation (Socket-Kommunikation) in Java (ASCII, Binär)
Erstellen Sie mit IntelliJ ein Java Spring Boot-Projekt
Erstellen Sie eine TODO-App in Java 7 Create Header
Java-Array-Variable
Erstellen Sie eine CSR mit erweiterten Informationen in Java
Partisierung in Java
[Kotlin] Übergeben Sie das Kotlin-Array an das Java-Argument mit variabler Länge. [Java]
Versuchen Sie, ein Bulletin Board in Java zu erstellen
Änderungen in Java 11
Informationen zu in Java verwendeten Variablen (lokaler Variablentyp)
[Java] Verwendung von final in der lokalen Variablendeklaration
Janken in Java
Lassen Sie uns mit Java ein supereinfaches Webframework erstellen
Java-Variablenbereich (Bereich)
Java-Variablendeklaration
Java-Variablenbereich
Organisiertes Memo im Kopf (Java - Datentyp)
Ich habe versucht, Alexa-Fähigkeiten mit Java zu erstellen
Umfangsrate in Java
FizzBuzz in Java
So erstellen Sie eine Java-Umgebung in nur 3 Sekunden
Deklaration / Initialisierung / Datentyp der Java-Variablen (Cast und Promotion)
Vektorisieren und bildgeben Sie handgeschriebene numerische MNIST-Bilddaten mit Java
Ich habe versucht, eine Clova-Fähigkeit in Java zu erstellen
Machen Sie die where-Klauselvariable in Spring Data JPA
[Android] Die Datenbindungsvariable wird in camelCase geschrieben
Unterschiede im Code bei Verwendung des Längensystems in Java
Lesen Sie JSON in Java
Interpreter-Implementierung durch Java
Machen Sie einen Blackjack mit Java
Janken App in Java
Einschränkungsprogrammierung in Java
Setzen Sie Java8 in Centos7
NVL-artiger Typ in Java
Verbinden Sie Arrays in Java
"Hallo Welt" in Java
Aufrufbare Schnittstelle in Java
[Java] Erstellen Sie einen Filter
Kommentare in der Java-Quelle
Ruby: CouchDB-Daten erstellen (Erstellen)
[Java] Datentyp ①-Basistyp
Azure funktioniert in Java
Formatieren Sie XML in Java
Einfache HTML-Spezialchars in Java
Verwendung von Java-Variablen
Boyer-Moore-Implementierung in Java
Hallo Welt in Java
Verwenden Sie OpenCV mit Java