Как читать данные из файла на сервере в байтовом массиве
Я хочу прочитать файл с сервера и получить данные о нем.
Я написал следующий кусок кода.
URL uurl = new URL(this.m_FilePath);
BufferedReader in = new BufferedReader(new InputStreamReader(uurl.openStream()));
String str;
while ((str = in.readLine()) != null) {
text_file=text_file+str;
text_file=text_file+"\n";
}
m_byteVertexBuffer=text_file.getBytes();
Но я получаю неправильный результат! Если я читаю данные из строки, я получаю m_bytevertexbuffer length=249664.
Теперь, когда я читаю локальный файл в bytearray, я получаю m_bytevertexbuffer length=169332.
FileInputStream fis = new FileInputStream(VertexFile);
fis.read(m_byteVertexBuffer);
ByteBuffer dlb=null;
int l=m_byteVertexBuffer.length;
Я хочу, чтобы те же данные в байтовом буфере с сервера, а также из локального файла!
1 ответ
Если сервер отправляет заголовок Content-Length: 999
Вы могли бы выделить new byte[999]
,
URL url = new URL("http://www.android.com/");
URLConnection urlConnection = url.openConnection();
int contentLength = urlConnection.getContentLength();
// -1 if not known or > int range.
try {
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
//if (contentLength >= 0) {
// byte[] bytes = new byte[contentLength];
// in.read(bytes);
// m_byteVertexBuffer = bytes;
//} else {
ByteArrayOutputStream baos;
byte[] bytes = new byte[contentLength == -1 ? 10240 : contentLength];
for (;;) {
int nread = in.read(bytes, 0, bytes.length);
if (nread <= 0) {
break;
}
baos.write(bytes, 0, nread);
}
m_byteVertexBuffer = baos.toByteArray();
//}
} finally {
urlConnection.disconnect();
}
В общем случае вы будете использовать только код else-ветви. Но все же, при наличии допустимой длины контента его можно использовать.