Dans java.io.FileInputStream
, il existe une méthode int read(Byte[] buffer,int offset,int numBytes)
; comment nous pouvons utiliser cette fonction - existe-t-il une différence entre cette méthode et read(byte[] buffer)
?Utilisation de FileInputStream Java
Répondre
Comme le Javadoc indique (et les noms des paramètres indiquent), la méthode avec l'offset et numBytes utilise seulement une partie de la mémoire tampon pour mettre sa sortie.
public int read(byte[] b,
int off,
int len)
throws IOException
Parameters:
b - the buffer into which the data is read.
off - the start offset of the data.
len - the maximum number of bytes read.
Vous pouvez utiliser cette méthode si vous souhaitez réutiliser un tampon existant contenant déjà des données que vous ne voulez pas écraser (bien sûr, le numBytes
commençant par offset
sera écrasé).
En Java, presque toutes les opérations sur les tampons offrent ce type d'interface. Utilisé correctement, vous pouvez éviter de copier/mettre en mémoire tampon des données plus de fois que nécessaire.
Cela est particulièrement intéressant si vous utilisez un tampon pour mettre en mémoire tampon et traiter simultanément les données d'un flux. Par exemple, un décodeur pour un format de support peut lire les données d'un flux dans un tampon et un autre thread prend les valeurs de ce tampon pour les traiter. Comme le tampon peut être rempli avant avec certaines valeurs, vous voulez commencer à remplir à un décalage donné (et donc utiliser le second paramètre). Si vous avez complètement rempli le tampon, vous commencerez au début, mais en utilisant uniquement l'espace déjà traité par l'autre thread et utilisez le paramètre len-param pour y parvenir. – Mnementh
Je viens d'obtenir ce de la javadoc.
Lit jusqu'à octets de données de ce flux d'entrée dans un tableau d'octets. Si len n'est pas nul, la méthode se bloque jusqu'à ce qu'une entrée soit disponible; sinon, aucun octet n'est lu et 0 est renvoyé.
Paramètres:
- b - la mémoire tampon dans laquelle les données sont lues. Off - Décalage de début dans le tableau de destination b
- len - le nombre maximal d'octets lus.
Renvoie: le nombre total d'octets lus dans la mémoire tampon, ou -1 s'il n'y a pas plus de données, car la fin du fichier a été atteinte.
http://java.sun.com/javase/6/docs/api/java/io/FileInputStream.html#read(byte[], int, int)
Cette fonction est très utile pour lire un fichier en mémoire. Voir cet exemple,
File = new File("/anywhere/anyfile");
InputStream is = new FileInputStream(file);
long fileSize = file.length();
byte[] bytes = new byte[(int)fileSize];
int offset = 0;
int count=0;
while (offset < fileSize) {
count=is.read(bytes, offset, fileSize-offset));
if (count >= 0)
offset += count;
else
throw new IOException("Can't read file "+file.getName());
}
is.close();
// Now bytes has all the complete file.
- 1. Récupère FileNotFoundException lors de l'initialisation de FileInputStream avec l'objet File
- 2. Java Aide: Utilisation des classes
- 3. Utilisation du séparateur Java Scanner
- 4. Utilisation de macros m4 avec Eclipse & Java
- 5. Utilisation de classes Java avec C#
- 6. Utilisation de Java Webservice dans .NET
- 7. Utilisation de java pour chiffrer des entiers
- 8. Utilisation d'alias de type Java énumérations
- 9. Utilisation de \ G boundary Matcher en Java
- 10. Utilisation de keystore Java dans PHP
- 11. Utilisation de modèles Excel avec POI Apache
- 12. Utilisation d'effets sonores dans un jeu java
- 13. Utilisation de Java 5 enums comme variables de vitesse
- 14. Utilisation de nouvelles polices avec Apache FOP en Java
- 15. Utilisation de l'API Java à partir d'un programme Cobol
- 16. Utilisation de Java Reflection pour initialiser les variables membres
- 17. Utilisation de Yahoo Fire Eagle sur Grails/Java
- 18. Utilisation de l'API Java pour lire les documents Lotus Notes
- 19. Utilisation des nombres premiers probables BigInteger de Java
- 20. Utilisation de fichiers .class dans Eclipse for Java Developers
- 21. Utilisation de fichiers de règles JRE «forts» avec BouncyCastle
- 22. Utilisation de C++ avec Eclipse
- 23. Utilisation de Jython avec M2Eclipse
- 24. Utilisation appropriée d'un ServletContextListener dans l'application Web Java/Apache Tomcat
- 25. Autre utilisation du ce mot-clé dans Java
- 26. Trouver où Java charge les fichiers?
- 27. Utilisation de JET avec EMF
- 28. Utilisation de threads et ProcessBuilder
- 29. Utilisation de la mémoire de JBoss?
- 30. Utilisation de ActiveMQ via JNDI
Répondre à cette question nécessite seulement une réflexion critique. Étant donné que vous connaissez la différence dans les arguments de méthode entre les deux fonctions, que pensez-vous de la différence? Comparez votre estimation avec la documentation. –