IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

FileChannel from Fichier distant avec connexion (FTP)


Sujet :

Entrée/Sortie Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 61
    Points : 39
    Points
    39
    Par défaut FileChannel from Fichier distant avec connexion (FTP)
    Bonjour tout le monde,

    J'ai une petite question sur histoire de FileChannel et MappedByteBuffer crée à partir d'un fichier distant (sur le réseau).
    Je m'explique. J'ai développé une application qui prend en entrée le nom d'un file et utilise de FileInputStream et apres FileChannel pour creer un MappedByteBuffer sur ce fichier la.

    Le problème c'est que la, je veut développer cette application pour qu'elle soit adaptée également aux fichiers qui se trouvent à distant sur un réseau.
    On a accès aux fichiers distants avec un API qui rend un InputStream a partir du fichier distant. La connexion se fait soit par FTP soit par HTTP.

    Le truc c'est que la sortie de cette API est un InputStream ou autrement dit on a un InputStream à partir de fichier distant mais on a besoin de FileInputStream pour creer FileChannel.

    Ma question c'est que :
    Comment créer un FileChannel ou un FileInputStream ou un MappedByteBuffer à partir d'un fichier qui se trouve à distant sur un réseau et la connexion se fait par FTP ou HTTP.

    est-ce que Casting de InputStream à FileInputStream ca peut marcher lorsqu'on sait que le InputStream est la sortie d'une connextion FTP (uri.getStream())?
    J'ai entendu des chose sur socketChannel etc mais franchement c'est mon première fois que je développe pour réseau et je connais rien de tout ca. Ce qui est essentiel pour moi est d'avoir un MappedByteBuffer à partir d'un fichier distant et pour cela il faut a priori un FileChannel qui se crée par FileInputStream. Mais la sortie de connexion réseau (au fichier distant) est InputStream.

    Sinon comment faire?
    Une idée? une piste?

    Je vous remercie tous par avance
    Hassan

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Ce n'est pas possible : les FileChannel et les MappedByteBuffer utilisent des fonctions bas niveaux de l'OS sur la gestion des fichiers...

    Si tu veux gérer gérer toutes sortes de sources de données, il va falloir te contenter d'InputStream ou gérer deux versions...

    Question : Pourquoi as-tu besoin des MappedByteBuffer ? C'est utilisé pour gérer de gros volume de données. Est-ce bien ton cas ?

    a++

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 61
    Points : 39
    Points
    39
    Par défaut
    Bonjour,
    Merci pour la réponse. En fait, j'ai besoin de MappedByteBuffer pour gérer des gros volume de donnée. Si je veut utiliser d'autre type de buffer, c'est plus performant.

    D'ailleurs, je me demande le seul sorti qu'on peut avoir avec une connexion FTP est de type InputStream? Pourquoi on ne peut pas avoir FileInputStream? FileInputStream herite quand même de InputStream.

    Je sais plus quoi faire, je suis complètement coincé... . Une idée?
    Je vous remercie tous d'avance.

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par hassanJava Voir le message
    Merci pour la réponse. En fait, j'ai besoin de MappedByteBuffer pour gérer des gros volume de donnée. Si je veut utiliser d'autre type de buffer, c'est plus performant.
    Au contraire ce serait moins performant !!!
    Les MappedByteBuffer utilisent des accès bas niveaux pour accéder au fichier directement sur le disque. Chose que tu ne peut pas faire sur un fichier distant par le protocole FTP !!!

    Citation Envoyé par hassanJava Voir le message
    D'ailleurs, je me demande le seul sorti qu'on peut avoir avec une connexion FTP est de type InputStream? Pourquoi on ne peut pas avoir FileInputStream? FileInputStream herite quand même de InputStream.
    Par un objet File représente un fichier local, et donc un FileInputStream un accès à un fichier local... ce qui n'a donc rien à voir avec un fichier distant...


    Que dois-tu faire exactement ? A quoi correspond ce "gros volume de données" ? Et pourquoi as-tu besoin de le gérer à distance ???

    a++

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 61
    Points : 39
    Points
    39
    Par défaut
    merci pour la réponse rapide.
    En effet, il y a certains fichiers sur une autre machine qui sont de taille plus de 2 giga. Du coup on ne peut pas les copier sur la machine client quand on veut les lire.

    Actuellement, il y a une application qui lit des contenus de ces fichiers avec des objets connexions (soit HTTP soit FTP) et le sorti de cette application et de type InputStream.

    Du coup, je dois prendre en entrée un InputStream et commencer à le bufferizer pour faire des traitement.

    J'ai deux solutions : 1- trouver une solution pour avoir un FileChannel et du coup MappedByteBuffer depuis InputStream
    2- Trouver une autre solution pour lire ces fichiers distants de manière qu'elle rend un FileInputStream ....

    Dans les deux cas, j'ai aucune idée... Alors, comment il faut lire des fichiers distants de grande taille?

    Merci bien

  6. #6
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Quel traitement tu fais sur ces fichiers distants de 2 Go ???

    a++

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 61
    Points : 39
    Points
    39
    Par défaut
    ce sont des traitements particuliers d'une application de statistique. Mais en gros il s'agit de lire des résultat des enquêtes....

  8. #8
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Ce que je veux dire c'est : que fais-tu sur ce fichier ?

    Tu le lis en entier ? Dans ce cas pourquoi ne pas le télécharger ?

    Tu le lis petit à petit ? En quoi cela te gêne-t-il d'utiliser un InputStream ?

    Tu le lis partiellement ? Dans ce cas il faudrait savoir si le protocole FTP permet cela...

    a++

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 61
    Points : 39
    Points
    39
    Par défaut
    je le lit petit à petit.... pour cela je charge en buffer une patite partie de fichier et chaque fois je met à jour le buffer.
    Pour cela, InputStream permet seulement de lire en byte[] qui n'est pas très performant. C'est pourquoi j'aimrais charger en MappedByteBuffer.......

  10. #10
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    C'est normal que ce soit moins performant ! D'autant plus que le réseaux rentre en compte...

    Tu as de si gros problème de performance avec un InputStream ?

    a++

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 61
    Points : 39
    Points
    39
    Par défaut
    disons que sur un fichier local, le MappedByteBuffer est 20% plus performant que Byte[]....

    Une question : si je lit le InputStream sorti de connexion FTP dans un Byte[]. Après que j'ai traité le Byte[] jusqu'à la fin... si je fait un autre InputStream.read(Byte[]), il lit de la suite de sorti de FTP? bref, lecture dans Byte[] d'un InputStream sorti d'une connexion FTP peut être répété pour lire juqu'à la fin de fichier distant?

    D'ailleurs, on ne peut pas avoir FileInputStream de SocketChannel?
    Merci bien

Discussions similaires

  1. ouvrir un fichier distant avec netbeans
    Par freddy000 dans le forum NetBeans
    Réponses: 0
    Dernier message: 20/11/2010, 00h02
  2. ouvrir un fichier distant avec une adresse ip
    Par nina_23 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 29/04/2010, 10h15
  3. [PHP 4] [PHP 4.4.1] probleme pour lire un fichier distant avec CURL
    Par seben dans le forum Langage
    Réponses: 6
    Dernier message: 27/11/2009, 08h38
  4. Réponses: 2
    Dernier message: 14/08/2007, 15h20
  5. Lire un fichier distant avec SSH
    Par Fritzoune dans le forum Langage
    Réponses: 3
    Dernier message: 06/09/2006, 11h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo