java从URLConnection读取二进制文件
我正在尝试从URLConnection读取二进制文件。当我用一个文本文件测试它时,它似乎工作得很好,但对于二进制文件则不行。当文件发送出去时,我在服务器上使用以下mime类型:
application/octet-stream
但到目前为止,一切似乎都不起作用。这是我用来接收文件的代码:
file = File.createTempFile( "tempfile", ".bin");
file.deleteOnExit();
URL url = new URL( "http://somedomain.com/image.gif" );
URLConnection connection = url.openConnection();
BufferedReader input = new BufferedReader( new InputStreamReader( connection.getInputStream() ) );
Writer writer = new OutputStreamWriter( new FileOutputStream( file ) );
int c;
while( ( c = input.read() ) != -1 ) {
writer.write( (char)c );
}
writer.close();
input.close();
# 1 楼答案
如果试图读取二进制流,则不应将
InputStream
包装在任何类型的Reader
中。使用InputStream.read(byte[], int, int)
方法将数据读入字节数组缓冲区。然后从缓冲区写入FileOutputStream
您当前读取/写入文件的方式将使用平台的默认字符编码将其转换为“字符”并返回字节。这很容易损坏二进制数据
(有一个字符集(拉丁语-1),它在字节和
char
值空间的子集之间提供1对1的无损映射。然而,即使在映射工作时,这也是一个坏主意。您将把二进制数据从byte[]
转换/复制到char[]
然后再转换/复制回来。。。在这种情况下,它什么也做不到。)# 2 楼答案
我就是这样做的