2010-10-14 3 views
3

quelqu'un peut-il me dire comment accéder au hasard un fichier au-delà de 2 Go avec android SDK. J'essayais de chercher une position> 2147483647 et j'ai obtenu l'exception: "Valeur trop grande pour le type de données défini". C'est étrange car le paramètre de la commande seek est de type "long". Voir l'exemple de code pour plus de détails: coucheRandom Access fichiers> 2 Go avec Android SDK

RandomAccessFile BigFile; 
BigFile = new RandomAccessFile(sMyFileName, "r"); 
BigFile.seek(2147483648); 
    --> Exception 

Merci pour toute aide, Michael

Répondre

3

qui est le résultat de l'exception bouillonne du natif/IO (système). Cela n'a rien à voir avec la taille du type dans la langue/VM elle-même. L'erreur sur le levier inférieur est EOVERFLOW ("Valeur à grande pour le type de données défini"). lseek, par exemple, répertorie cette erreur.

Hypothèse: L'accès au système sous-jacent n'est pas «conscient» 64 bits :-) Certains réels JRE avait aussi ce problème historiquement, IIRC. Je ne sais pas quelle est l'histoire sur Android.

Edit: Le fil à FAT32 file size limited to 2GB semble relier l'Android 2.x (et contient des détails/conseils/hypothèse sur les limites compilation du noyau et/ou IO lib - un consensus est « ça ne marche pas ») .

+0

Merci pour la réponse. En fait, j'ai lu cet article pendant que je cherchais une solution. Mais j'espérais qu'ils se trompaient et qu'il y avait une solution. : -/Mais je pense que tu as raison. Le système d'E/S sous-jacent semble ne pas utiliser 64 bits. (Mais lseek64 fait partie de l'OS Android - pourquoi n'est-il pas utilisé?) – Michael