วิธีการแปลงจาก InputStream เป็น String

โดยปกติแล้วเวลาดึงข้อมูลจากอินเทอร์เน็ตผ่านทาง HttpClient ผลลัพธ์ที่ได้ จะได้เป็น InputStream แต่ในทางปฏิบัติเราต้องการ String เพื่อนำไปประยุกต์ใช้เช่นการแปลงเป็น JSONObject

วิธีที่หนึ่ง ใช้ BufferReader อ่านมาทีละบรรทัดแล้วเชื่อมกัน

    public static String convertStreamToString(InputStream is) {
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        StringBuilder sb = new StringBuilder();
 
        String line = null;
        try {
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return sb.toString();
    }

ข้อเสียของวิธีแรกคือจะมีการขึ้นบรรทัดใหม่ ณ ตัวสุดท้ายของ String เสมอ
(แก้ได้โดยการตัดตัวอักษรตัวสุดท้ายทิ้ง)

อีกวิธีหนึ่งซึ่งได้ผลลัพธ์ถูกต้องกว่าคือการใช้ ByteArrayOutputStream เข้าช่วย โดยการอ่านข้อมูลมาใส่ buffer แล้วเติมลงใน BAOS จากนั้นจึงสร้าง String ขึ้นมาจาก ByteArray ดังกล่าว

    public static String convertStreamToString(InputStream is) throws IOException
    {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buffer = new byte[2048];
        int length = 0;
        while ((length = is.read(buffer)) != -1) {
            baos.write(buffer, 0, length);
        }
        return new String(baos.toByteArray());
    }
Facebooktwittermailby feather
ข้อความนี้ถูกเขียนใน Android, Java, Programming คั่นหน้า ลิงก์ถาวร

ใส่ความเห็น