Android: lire un fichier GZIP dans le dossier assets
Comment pouvez-vous lire le fichier GZIP Android, et situé dans les "ACTIFS" (ou de ressources/raw) dossier?
J'ai essayé le code suivant, mais mon flux taille est toujours 1.
GZIPInputStream fIn = new GZIPInputStream(mContext.getResources().openRawResource(R.raw.myfilegz));
int size = fIn.available();
pour une raison quelconque, la taille est toujours 1. Mais si Idon pas GZIP le fichier, il fonctionne très bien.
REMARQUE:
À L'Aide De Android 1.5
Avez-vous vérifié votre taille de fichier? Depuis APK fichiers sont des archives ZIP, si cette ressource devient comprimé de toute façon, peut-être il n'existe pas de valeur dans GZIPping.
En écho à commonsware, j'ai trouvé que gzipping actifs a absolument aucun effet sur apk taille depuis apk sont déjà compressés. Encore, une intéressante question de savoir pourquoi cela ne fonctionne pas (comme j'ai pris un scénario de ce type de fonction, avant, pendant mes tests).
int taille = fIn.disponible(); <- documentation de java dit: Retourne 0 après EOF a atteint, sinon toujours de retour 1.
En écho à commonsware, j'ai trouvé que gzipping actifs a absolument aucun effet sur apk taille depuis apk sont déjà compressés. Encore, une intéressante question de savoir pourquoi cela ne fonctionne pas (comme j'ai pris un scénario de ce type de fonction, avant, pendant mes tests).
int taille = fIn.disponible(); <- documentation de java dit: Retourne 0 après EOF a atteint, sinon toujours de retour 1.
OriginalL'auteur Tawani | 2010-03-02
Vous devez vous connecter pour publier un commentaire.
J'ai rencontré le même problème lors de la lecture d'un fichier gz à partir d'éléments de dossier.
Elle est causée par le nom de fichier du fichier gz. Simplement en renommant yourfile.gz de l'autre nom comme monfichier.bin. Il semble Android système de construction permettrait de décompresser un fichier automatiquement si elle pensait que c'est un gz.
.gz
extension. Vous avez encore besoin d'envelopper le flux d'entrée dans un GZIPInputStream de le lire.Merci beaucoup!!!
Se produit toujours sur le plus récent Android Studio.. 😛
OriginalL'auteur Cuper Hector
R. raw.ressources est un fichier zip - cette classe va décompresser tous les fichiers dans ce zip dans votre dossier local.
- Je l'utiliser pour NDK.
vous pouvez accéder à votre fils de ndk par le biais de:
/data/data//fichiers/
package = paquet, où réside ResLoader
filename = l'un des fichiers que est en raw/resources.zip
OriginalL'auteur fazo
c'est le comportement documenté de InflaterInputStream.disponible:
http://java.sun.com/javase/6/docs/api/java/util/zip/InflaterInputStream.html#available()
abuser disponible est une erreur commune --- en aucun cas, peut-on supposer qu'il vous indique la longueur d'un fichier (si il arrive à le faire, comme vous l'avez remarqué). vous voulez garder l'appel read(byte[], int, int) jusqu'à ce qu'elle retourne 0. si vous voulez que la longueur d'allouer un byte[] à l'avant, vous souhaiterez probablement créer un ByteArrayOutputStream et écrire à chaque fois de vous lire, et ensuite obtenir un byte[] partir que lorsque vous sortir de la boucle. cela fonctionne pour tous les InputStreams dans tous les cas.
OriginalL'auteur Elliott Hughes
Il semble que la construction du système de traite .les fichiers gz comme un cas particulier, même lorsqu'il est inclus comme une ressource brute. Renommez le .gz fichier à avoir une extension différente, disons .raw ou .bin .
Valable au moins pour Android Studio 2.2 . Je ne trouve pas de docs pour confirmer ce comportement est normal ou, mieux, comment les éviter, mais la modification de l'extension au moins contourne le problème.
OriginalL'auteur Jim Keir
Ce qui se passe si vous utilisez
AssetManager
au lieu deResources
? Exemple:En interne,
Resources
est juste appelerAssetManager
; je me demande si quelque part le long de la façon dont il musses les choses.OriginalL'auteur Daniel Lew
Essayer de regarder les source pour Traduire de applications-pour-android projet open source et voir si cela aide à tous.
Ils utilisent GZIPInputStream sur un fichier raw dans leur selectRandomWord() la fonction [326] (source collé ci-dessous)
hmmm, c'est une drôle de problème. C'est un coup de feu dans l'obscurité mais peut-être essayez de rafraîchir votre projet dans eclipse et recompiler comme décrit dans stackoverflow.com/questions/2322820/...
OriginalL'auteur snctln