En Java: est où un moyen de créer un sous-tableau qui pointera vers une partie d'un tableau plus grand?
L'apprentissage de Java, alors soyez gentil s'il vous plaît. Idéalement, j'ai besoin de créer un tableau d'octets qui seront point à une partie d'un plus grand tableau:
byte[] big = new byte[1000];
//C-style code starts
load(file,big);
byte[100] sub = big + 200;
//C-style code ends
Je sais que ce n'est pas possible en Java et il y a deux solutions de rechange qui viennent à l'esprit et comprennent:
- Soit la copie de la partie de grand en sous une itération à travers grand.
- Ou de l'écriture propre classe qui va prendre une référence à gros + offset + taille et la mise en œuvre de la "subarray" grâce aux méthodes d'accès à l'aide grand que les données sous-jacentes de la structure.
La tâche que je suis en train d'essayer de le résoudre est de charger un fichier dans la mémoire, puis accéder en lecture seule aux enregistrements stockés dans le fichier par l'intermédiaire d'une classe. La vitesse est primordiale, donc idéalement j'aimerais éviter de copier ou de méthodes d'accès. Et depuis que je suis en train d'apprendre le Java, je voudrais rester avec elle.
D'autres alternatives que j'ai obtenu? Merci de ne poser des questions si je n'ai pas à expliquer la tâche assez bien.
source d'informationauteur Vlad Gudim
Vous devez vous connecter pour publier un commentaire.
La création d'un groupe comme une "vue" d'un autre tableau n'est pas possible en Java. Mais vous pouvez utiliser java.nio.ByteBufferqui est essentiellement la classe que vous suggérer de travailler autour de #2. Par exemple:
Pas de reproduction (certains de création de l'objet, tout de même). Comme un standard de la bibliothèque de la classe, je voudrais aussi supposer que ByteBuffer est plus susceptibles de recevoir un traitement spécial wrt. "JIT" optimisations par la JVM qu'un personnalisé.
Si vous voulez lire un fichier rapide et à faible niveau d'accès, cochez la java nio choses. Voici un exemple de java almanach.
Vous pouvez utiliser un mappage de tampon d'octets pour naviguer dans le contenu du fichier.
Prendre un coup d'oeil à la source pour java.lang.Chaîne (il sera dans l'src.zip ou src.jar). Vous verrez qu'ils ont un tableau de rselnal et puis un début et une fin. Donc, oui, la solution est d'utiliser une classe pour le faire.
Voici un lien vers la source en ligne.
Les variables d'intérêt sont:
la sous-chaîne est sans doute une bonne méthode pour regarder comme un point de départ.
Si vous voulez lire directlry à partir du fichier de faire usage de la java.nio.les canaux.FileChannel classe, plus précisément la méthode map () - qui vous permettra d'utiliser memory mapped I/O qui sera très rapide et utilise moins de mémoire que la copie de tableaux.
La lecture du fichier de mémoire est bonne cul bientôt fichier est relativement faible. Mais lorsque vous avez à traiter avec de grands fichiers de les garder hors de la mémoire est beaucoup plus objectif souhaité.
MappedByteBuffer est cette chose que vous êtes à la recherche pour.
MappedByteBuffer est Une conséquence directe de tampon d'octets dont le contenu est mappé en mémoire d'une région d'un fichier. Le contenu d'un mappé octets de la mémoire tampon peut changer à tout moment, par exemple si le contenu de la région correspondante de la mappé fichier est modifié par ce programme ou un autre. De savoir si ou non de tels changements se produisent, et quand ils se produisent, est dépendante du système d'exploitation et, par conséquent, non spécifié.