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