تحويل محتويات بايتيراينبوتستريم إلى سلسلة
-
26-12-2019 - |
سؤال
قرأت هذا المنصب لكنني لا أتابع.لقد رأيت هذا ولكن لم أر مثالا مناسبا لتحويل ByteArrayInputStream
إلى String
باستخدام ByteArrayOutputStream
.
لاسترداد محتويات ByteArrayInputStream
كما String
, ، يستخدم أ ByteArrayOutputstream
أوصى أم أن هناك طريقة أكثر تفضيلا?
كنت أفكر هذا المثال وتمديد ByteArrayInputStream
والاستفادة من ديكور لزيادة الوظائف في وقت التشغيل.أي مصلحة في هذا كونه حلا أفضل لتوظيف ByteArrayOutputStream
?
المحلول
A ByteArrayOutputStream
يمكن قراءة من أي InputStream
وفي النهاية تسفر عن byte[]
.
ولكن مع ByteArrayInputStream
إنه أبسط:
int n = in.available();
byte[] bytes = new byte[n];
in.read(bytes, 0, n);
String s = new String(bytes, StandardCharsets.UTF_8); // Or any encoding.
ل ByteArrayInputStream
available()
ينتج إجمالي عدد وحدات البايت.
الإجابة على التعليق:باستخدام بيتيرايوتبوتستريم
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buf = new byte[8192];
for (;;) {
int nread = in.read(buf, 0, buf.length);
if (nread <= 0) {
break;
}
baos.write(buf, 0, nread);
}
in.close();
baos.close();
byte[] bytes = baos.toByteArray();
هنا في قد يكون أي إنبوتستريم.
نصائح أخرى
لماذا لم يذكر أحد org.apache.commons.io.IOUtils
?
import java.nio.charset.StandardCharsets;
import org.apache.commons.io.IOUtils;
String result = IOUtils.toString(in, StandardCharsets.UTF_8);
سطر واحد فقط من التعليمات البرمجية.
استخدام Scanner
وتمرير لانها منشئ ByteArrayInputStream
ثم اقرأ البيانات من الماسح الضوئي الخاص بك ، وتحقق من هذا المثال :
ByteArrayInputStream arrayInputStream = new ByteArrayInputStream(new byte[] { 65, 80 });
Scanner scanner = new Scanner(arrayInputStream);
scanner.useDelimiter("\\Z");//To read all scanner content in one String
String data = "";
if (scanner.hasNext())
data = scanner.next();
System.out.println(data);
استخدم ترميز القاعدة 64
بافتراض أنك حصلت على تيار الإخراج الخاص بك :
ByteArrayOutputStream baos =...
String s = new String(Base64.Encoder.encode(baos.toByteArray()));
انظر http://docs.oracle.com/javase/8/docs/api/java/util/Base64.Encoder.html