3 votes

Besoin d'aide Créer un grand tableau à partir de petits tableaux d'octets

J'ai obtenu le code suivant :

    byte[] myBytes = new byte[10 * 10000];
    for (long i = 0; i < 10000; i++)
    {
        byte[] a1 = BitConverter.GetBytes(i);
        byte[] a2 = BitConverter.GetBytes(true);
        byte[] a3 = BitConverter.GetBytes(false);

        byte[] rv = new byte[10];
        System.Buffer.BlockCopy(a1, 0, rv, 0, a1.Length);
        System.Buffer.BlockCopy(a2, 0, rv, a1.Length, a2.Length);
        System.Buffer.BlockCopy(a3, 0, rv, a1.Length + a2.Length, a3.Length);
    }

tout fonctionne comme il se doit. j'essayais de convertir ce code pour que tout soit écrit en myBytes mais ensuite j'ai réalisé que j'utilise un long et que si sa valeur est plus élevée alors int.MaxValue le casting échouera. comment résoudre ce problème ?

Une autre question serait, puisque je ne veux pas créer un très grand tableau d'octets en mémoire, comment pourrais-je l'envoyer directement à mon système de gestion de l'environnement ? .WriteBytes(path, myBytes); fonction ?

2voto

Marc Gravell Points 482669

Si la destination finale est, comme suggéré, un fichier, alors écrivez dans un fichier plus directement, plutôt que de mettre en mémoire tampon :

using (var file = File.Create(path)) // or append file FileStream etc
using (var writer = new BinaryWriter(file))
{
    for (long i = 0; i < 10000; i++)
    {
        writer.Write(i);
        writer.Write(true);
        writer.Write(false);
    }
}

Peut-être que la manière idéale de faire cela dans votre cas serait de passer un seul BinaryWriter à chaque objet au fur et à mesure que vous les sérialisez (n'ouvrez pas et ne fermez pas le fichier par objet).

1voto

cirrus Points 2354

Pourquoi ne pas simplement écrire() les octets au fur et à mesure que vous les traitez plutôt que de les convertir en un tampon massif, ou utiliser un tampon plus petit au moins ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X