سؤال

قرأت هذا المنصب لكنني لا أتابع.لقد رأيت هذا ولكن لم أر مثالا مناسبا لتحويل 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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top