11
votes

Comment convertir efficacement le tableau des octets en chaîne

J'ai un tableau d'octets de 151 octets qui est typiquement un enregistrement, l'enregistrement doit être inséré dans une base de données Oracle. Dans 151 octets de la gamme de tableau de 0 à 1 est un ID d'enregistrement, 2 à 3 est un identifiant de référence, 4 à 9 est une valeur de date. Les données suivantes dans un tableau d'octets sont une valeur de date. Je veux le convertir en chaîne xxx

existe-t-il un moyen de convertir efficacement une matrice d'octet de certaines gamme ( Arrays.copyofrange (B, 0,5) ) à la chaîne.


1 commentaires

@Martjin J'ai un fichier qui compte 527890 octets et je dois lire le morceau de 2048 octets qui compte 13 enregistrements, chaque enregistrement est de 151 octets, et nous devons extraire les gammes et stocker dans des colonnes de table.;)


5 Réponses :


1
votes

Utilisez la chaîne (octets [] octets, INT OFFSET, LONGUEUR INT) Constructeur: http://download.oracle.com/javase/1.5.0/docs/api/java/lang /String.html#string (octet [], int, int) xxx


0 commentaires

18
votes
new String(b, 0 ,5);
See the API doc for more information.

1 commentaires

@Rekin: Non, Suresh ne veut pas utiliser l'ensemble du réseau d'octets. S'il le faisait, ce serait beaucoup plus simple: nouvelle chaîne (B)



-1
votes

et ici de manière fantastique (non efficace) :) xxx


0 commentaires

1
votes

Si vous devez créer une chaîne pour chaque région de l'enregistrement, je suggérerais une approche de sous-chaîne:

byte[] wholeRecord = {0,1,2 .. all record goes here .. 151}
String wholeString = new String(wholeRecord);
String id = wholeString.substring(0,1);
String refId = wholeString.substring(1,3);
...


1 commentaires

Merci. mais vous avez dit que le décalage serait différent. Comment faire cela de manière dynamique en fonction du décalage.



1
votes

Aucune des réponses ici considère que vous n'utilisez peut-être pas l'ASCII. Lors de la conversion des octets vers une chaîne, vous devez toujours envisager le brict.

new String(bytes, offset, length, charset);


1 commentaires

C'est la bonne réponse. (Mais, encore pire que ASCII, cette autre surcharge utilise le codage par défaut , qui varie de temps à autre, utilisateur à l'utilisateur, système au système.)