我正在尝试读取图像并通过Java套接字传递它。但有一些不合适的位。在diff工具中查看时,我意识到所有大于127的数字都被截断了。
所以我想将它转换为char []数组并返回它。现在我得到了一个不同的complette图像,可能是因为char的大小。
try (PrintWriter out = new PrintWriter(this.socket.getOutputStream(), true);
BufferedInputStream in = new BufferedInputStream(new FileInputStream(filename), BUFSIZ)) {
byte[] buffer = new byte[BUFSIZ];
while (in.read(buffer) != -1) {
response.append(new String(buffer));
out.print(response.toString());
response.setLength(0);
}
} catch (IOException e) {
System.err.println(e.getMessage());
}
这是我的阅读和交付代码。
我已经阅读了很多次使用ImageIO,但我想没有,因为我不知道它是否是一个图像。 (那么其他文件类型如可执行文件呢?)
那么,有没有什么办法可以将它转换为无符号字节,可以在客户端上正确传递?我是否必须使用与read()不同的东西来实现它?
答案 0 :(得分:2)
OutputStream.
用于字符数据。使用read()
并且您通常会假设int count;
byte[] buffer = new byte[8192];
while ((count = in.read(buffer)) > 0)
{
out.write(buffer, 0, count);
}
填充了缓冲区。
以下循环将正确复制任何内容。记住它。
.par-1 {
width: 3px;
color:#fff;
padding: 1px 0;
}
.par-2 {
width: 6px;
color: #000;
padding: 0 2px;
}
.par-3 {
width: 9px;
color: #fff;
padding: 3px 0;
}
.par-4 {
width: 12px;
color: #000;
padding: 0 4px;
}
.par-5 {
width: 15px;
color: #fff;
padding: 5px 0;
}
.par-6 {
width: 18px;
color: #000;
padding: 0 6px;
}
答案 1 :(得分:2)
在我之后重复:byte
不是Writer
而且它不是代码点。
在我之后重复:OutputStream
不是 try (OutputStream out = this.socket.getOutputStream();
BufferedInputStream in = new BufferedInputStream(new FileInputStream(filename), BUFSIZ)) {
byte[] buffer = new byte[BUFSIZ];
int len;
while ((len = in.read(buffer))) != -1) {
out.write(buffer, 0, len);
}
} catch (IOException e) {
System.err.println(e.getMessage());
}
。
Backbone.Events.testEvent = "just a quick proof of concept test";
(这是来自内存,请检查args是否为write())。