โดยปกติแล้วเวลาดึงข้อมูลจากอินเทอร์เน็ตผ่านทาง 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()); } |