Работа с DataInputStream в соответствии с новыми стандартами в Android/Java
У меня был такой метод в приложении для Android, читающий сырой файл:
public String inputStreamToString(InputStream isTwo) throws IOException {
StringBuffer sBuffer = new StringBuffer();
DataInputStream dataIO = new DataInputStream(isTwo);
String strLineTwo = null;
while ((strLineTwo = dataIO.readLine()) != null) {
sBuffer.append(strLineTwo + "\n");
}
dataIO.close();
isTwo.close();
return sBuffer.toString();
}
Однако объект DataInputStream, по-видимому, сейчас устарел. Я исследовал это и услышал, что лучше обернуть readline()
с BufferedInputStream
, Может ли кто-нибудь помочь мне закончить его (заполнить пропущенную строку)? Я не уверен, как объявить br
вар. Это то, что я до сих пор:
public String inputStreamToString(InputStream isTwo) throws IOException {
String strLineTwo = null;
BufferedReader br = null;
StringBuffer sBuffer = new StringBuffer();
InputStreamReader dataIO = new InputStreamReader(isTwo);
while ((strLineTwo = br.readLine()) != null) {
sBuffer.append(strLineTwo + "\n");
}
dataIO.close();
isTwo.close();
return sBuffer.toString();
Вот предыдущий код, который я еще не коснулся, который вызывает этот метод:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tech);
InputStream iFileTwo = getResources().openRawResource(R.raw.testing);
try {
TextView helpText = (TextView) findViewById(R.id.tvStream);
String strFileTwo = inputStreamToString(iFileTwo);
helpText.setText(strFileTwo);
} catch (Exception e) {
Log.e(DEBUG_TAG_THREE, "InputStreamToString failure", e);
}
}
Кроме того, я хочу убедиться, что он работает с Android 2.3 до 4.2 (текущий). Спасибо за любую помощь.
2 ответа
Вот как бы я это написал. Это значительно снижает накладные расходы и сохраняет переводы строк такими, какими они были изначально.
public String inputStreamToString(InputStream in) throws IOException {
StringBuilder out = new StringBuilder();
char[] chars = new char[1024];
Reader reader = new InputStreamReader(in /*, CHARSET_TO_USE */);
try {
for (int len; (len = reader.read(chars)) > 0; )
out.append(chars, 0, len);
} finally {
try {
in.close();
} catch (IOException ignored) {
}
}
return out.toString();
}
Просто предложение, если вы мигрируете, то почему бы не использовать IOUtils
из библиотек, как apache commons
и т.д., которые фактически заботятся об управлении вашими потоками, а также избавляют вас от множества ошибочных условий