Comment peut-on lire ou d'utiliser le contenu de outputstream
Comment peut-on lire ou d'utiliser le contenu de outputstream.
Dans mon cas, je suis en utilisant une méthode ayant la signature.
public static OutputStream decryptAsStream(InputStream inputStream,
Chaîne encryptionKey)
Cette méthode de retour OutputStream. Je veux obtenir OutputStream à la Chaîne.
Est-il possible de rediriger la sortie d'une java.io.OutputStream à une Chaîne de caractères en Java?
Vous ne lisez pas de outputstream - vous écrire à outputstream: docs.oracle.com/javase/7/docs/api/java/io/...
OriginalL'auteur bajrangi | 2013-08-03
Vous devez vous connecter pour publier un commentaire.
En général, vous ne pouvez pas. Un
OutputStream
est un objet que vous écrivez octets. Le général de l'API ne fournit pas de moyen d'obtenir les octets de retour.Il y a certains types de flux de sortie qui vous permettra d'obtenir les octets de retour. Par exemple:
ByteArrayOutputStream
a une méthode pour obtenir le tableau d'octets contenus.PipeOutputStream
a un correspondantPipeInputStream
que vous pouvez lire.FileOutputStream
pour écrire dans un fichier, vous pouvez généralement ouvrir unFileInputStream
de lire le contenu du fichier ... à condition que vous connaissez le chemin des fichiers.Regardant cette méthode, il me semble que la signature de la méthode est mal pour ce que vous essayez de faire. Si le but est de fournir une encryption pour un flux de données, la méthode doit retourner un
InputStream
. Si le but est d'écrire les données chiffrées quelque part, puis la méthode doit retournervoid
et prendre un paramètre supplémentaire qui est laOutputStream
que la méthode doit écrire. (Et puis, l'appelant peut utiliser unOutputStream
sous-classe de capturer les données chiffrées ... si c'est ce qui est souhaité.)Une autre alternative qui permettrait de "travail" est de changer la signature de la méthode pour faire le type de retour
ByteArrayOutputStream
(ou un nom de fichier). Mais ce n'est pas une bonne solution car il enlève l'appelant la possibilité de décider de l'endroit où la cryptés la sortie doit être envoyé.Mise à JOUR
Au sujet de votre solution
Qui pourrait fonctionner, mais il est mauvais code:
Si
AESHelper.decryptAsStream
est une méthode que vous avez écrit (et il semble que c'est!), ensuite, vous devez le déclarer comme retournant unByteArrayOutputStream
.Si elle est déjà déclaré que le retour d'un
ByteArrayOutputStream
vous devez affecter directement àbaos
.De toute façon, vous ne devez PAS initialiser
baos
nouvellement crééByteArrayOutputStream
instance qui obtient immédiatement jetés.Il est également intéressant de noter que le Type de Contenu est incorrect. Si vous avez envoyé la réponse à un navigateur, il allait tenter d'interpréter les données chiffrées comme une image ... et de ne pas. En théorie, vous pourriez définir un Encodage de Contenu d'en-tête ... mais il n'y en a pas un qui va travailler. Donc, la meilleure solution est d'envoyer le Contenu de Type "application/octet-stream".
OriginalL'auteur Stephen C
Vous pouvez faire quelque chose comme suit :
OriginalL'auteur Ushani
Si vous en avez l'
OutputStream
de laresponse
, vous pouvez écrire le contenu de laOutputStream
à la réponse qui sera envoyée au navigateur . Exemple de code :Lire ceci : Content-Disposition:Quelles sont les différences entre “en ligne” et “attachement”?
Dans votre cas, la définition de la méthode est :
De sorte que vous pouvez obtenir le
OutputStream
à partir de cette méthode :Et ensuite utiliser le
os
.OriginalL'auteur NINCOMPOOP
Principalement, vous pouvez utiliser
outputstreams
pour envoyer le contenu du fichier comme @Le Nouveau Idiot mentionné. .des fichiers pdf, zip fichier, les fichiers d'image etc.Dans de tels scénarios, obtenir le flux de sortie de votre servlet et à écrire le contentes
OriginalL'auteur UVM