9
votes

Lire / écrire au tuyau Linux à l'aide de Java

Ma requête est sur quelle est la meilleure façon de lire / écrire à un tuyau de Linux en Java? J'utilise déjà le java.io.randomAccessfile comme xxx

puis le transmet au fil de travailleur qui le lit après chaque 2 ms comme xxx

Il le lit à partir de tuyau, mais je soupçonne que certains octets sont écrasés. Savez-vous comment Linux (Ubuntu) gère le tampon pour les tuyaux?


2 commentaires

Quelle est la connexion à l'astérisque?


En réalité, le / dev / zap / 16 est créé par le pilote Zaptel utilisé pour l'astérisque lorsque la carte SS7 est installée sur votre machine. L'astérisque a un module qui lit ce tuyau mais est en code natif. J'essaie de faire fonctionner ce travail sur Java. Hors du sujet, mais si vous essayez d'installer Asterisk + SS7 voici mon expérience amitbhayani.blogspot.com/2009/04/asterisk-sss7.html


3 Réponses :


11
votes

Je n'ai jamais essayé cela moi-même, mais que vous sentez bien. Les tuyaux Linux sont d'abord inscrits (FIFO) par définition. Vous ne devriez donc être capable de lire des octets dans le même ordre que vous les avez écrits - pas au hasard. Je suggérerais d'utiliser un fichier normal à la place et cela devrait fonctionner correctement.


3 commentaires

Voulez-vous dire un fichier normal ? C'est ce que j'essayerais d'abord aussi.


FileInputStream et FileOutPutStream respectivement, oui


Intéressant ... Chaque didacticiel que j'ai trouvé sur des tuyaux en Java utilise des fournits aléatoires.



6
votes

Les tuyaux ne sont pas gérés de quelque manière que ce soit spécial de Java autant que je sache. Vous ouvrez simplement le fichier pour écrire et écrivez-y.

Vous ne pouvez pas vraiment "écraser" quelque chose dans un tuyau, car vous ne pouvez pas chercher dans un tuyau. Pour la même raison, un aléatoireAccessfile n'est pas le choix le plus intelligent à utiliser (puisqu'un tuyau est explicitement pas un fichier d'accès aléatoire). Je suggérerais d'utiliser un FileOutPutStream à la place.

Notez également que lisez () n'est pas garanti à lire tant que le tampon est plein! Il peut également lire un seul octet et vous devez vérifier sa valeur de retour et éventuellement une boucle pour lire le tampon complet.


0 commentaires

0
votes

Je pense que vous ne pouvez pas craindre après l'écriture, donc les sortiestream.flush () souvent et la lecture peut être un octet à l'heure, au moins pour voir si vos données se font passer. par exemple. Pour commencer avec Ouvrir un tuyau nommé en mode Readonly (FileInputStream) dans Process1, ouvrez-le en mode d'écriture (FileOutPutStream) dans Process2, tout ce que vous écrivez dans Process2 sera lu dans le processus1.

a également lu

http://www.tldp.org/ldp/lpg/node15.html
http://www.unixguide.net/unix/programming/2.10.5. shtml http://www.unixguide.net/unix/programming/2.10.6. shtml


0 commentaires