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).
Je développe principalement des applications web Java (Spring Boot).
Le code source et les fichiers d'entrée peuvent être trouvés sur GitHub.
――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.
--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éparez un fichier texte de longueur variable UTF-8 comme matériau 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
La compilation et l'exécution sont simples.
--Compiler
javac EditBinary.java
--Exécuter
java EditBinary
Jetons un œil au contenu de output.txt avec "Hex Fiend". 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.
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.
Recommended Posts