如何以字节数组从服务器中的文件中读取数据

Posted

技术标签:

【中文标题】如何以字节数组从服务器中的文件中读取数据【英文标题】:How to read data from file in server in byte array 【发布时间】:2013-08-20 13:00:09 【问题描述】:

我想从服务器读取一个文件并获取它的数据。

我写了以下代码。

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。

现在,当我将本地文件读入字节数组时,我得到 m_bytevertexbuffer length=169332。

FileInputStream fis = new FileInputStream(VertexFile);
fis.read(m_byteVertexBuffer);

ByteBuffer dlb=null;

int l=m_byteVertexBuffer.length;

我想要来自服务器和本地文件的字节缓冲区中的相同数据!

【问题讨论】:

要读取字节,从 InputStream 读取,不要用 Reader 包装它。您的第二段代码没有意义:它打印字节数组的长度,无论您是否从文件中读取,这都是相同的。阅读 Java IO 教程:docs.oracle.com/javase/tutorial/essential/io/bytestreams.html 简而言之我想问我​​应该如何读取放置在服务器中的二进制文件? 【参考方案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 分支的代码。但是,如果存在有效的内容长度,它仍然是可用的。

【讨论】:

无法保证 read() 方法会一次读取所有字节。应始终使用循环。 @MuneemHabib 试试in.close(); @MuneemHabib 也许还有其他问题:写作没有调用close() 所以最后一部分现在被刷新,写入。 先生,它没有读取完整字节,我也在通过文件流从 sdcard 读取二进制文件,它工作得很好,但我陷入了这个问题,我没有发现任何问题,但它没有读取完整字节

以上是关于如何以字节数组从服务器中的文件中读取数据的主要内容,如果未能解决你的问题,请参考以下文章

DELPHI如何读取一个图片,保存到字节数组中

VB如何读取一个图片,保存到字节数组中

Java:如何“修剪”字节数组?

NAudio C#:如何从 WaveInEventArgs 获取字节数组以进行进一步操作

如何在 Spring MVC 中将字节数组转换为 ZipOutputStream?

如何从 Python 3 中的字节数组中的特定位中提取值?