我写了一个基本的java服务器端聊天应用程序。 目前我使用DataInputStream
和readUTF()
,它只是传输文本。Java,通过输入/输出流发送数据
任何人都知道发送图像旁边(或不旁边)文字的最佳方式?
我是相当新的Java和它的软件包,任何建议都很好:)
我写了一个基本的java服务器端聊天应用程序。 目前我使用DataInputStream
和readUTF()
,它只是传输文本。Java,通过输入/输出流发送数据
任何人都知道发送图像旁边(或不旁边)文字的最佳方式?
我是相当新的Java和它的软件包,任何建议都很好:)
对于写入图像,使用的ImageIO:
BufferedImage img = ImageIO.read(new File("c:\test\img.png"));
ImageIO.write(img,"png", <out writer variable>);
用于读取图像,使用的ImageIO:
BufferedImage img = ImageIO.read(ImageIO.createImageInputStream(<socket input stream variable>));
注:readUTF
将无法正常工作,因为它用于读取UTF字节
我只做过几次而没有正式设置。据说这很可能是而不是通过任何套接字流执行图像传输的正确方法,所以如果任何人有任何洞察正确的方式做到这一点,请分享。
在所有发送来回的数据中,如果为一个标题指定了128个字节,则此标题将包含有关您发送的数据内容的信息。
假设您有客户端A,并且他们想要将图像发送给他们的朋友客户端B.客户端a通过发送包含消息的数据包:“FILE 45000 myimage.bmp”(您应该找到更好的方式发送头部比以FILE开头,类似于发送图像的数字2和发送消息的数字1)。发送文件大小,文件的名称,以后可以获得技术并发送校验和。
然后客户端A将开始流式传输所有标题为相同标题信息的数据。然后,客户端B将接收数据并在它进入时开始组装它。如果一条消息不是以“FILE”开头,那么您可以确定如何处理该数据包(可能是文本消息或其他内容)。
什么IM打算把这里大多是伪代码,因为我真的不知道你的代码是什么样子,但它可能是这个样子:
DataInputStream in = new DataInputStream(/*your sockets inputstream*/);
FileOutputStream out = new FileOutputStream(new File("c:\\myfile"));
int numRead = 0;
byte[] bytes = new byte[1024];
while((numRead = in.read(bytes)) != -1) {
String header = new String(bytes, 0, 128);
if(header.startsWith("TEXT")) {
// send text to your chat box
String content = new String(bytes, 128, bytes.length-128);
} else if(header.startsWith("FILE")) {
// write the remainder of the file to the harddrive
out.write(bytes, 128, bytes.length-128);
}
}
这是所有的东西玩弄和犯错误并修复。对Java新手全是关于试验和错误的,如果你有任何问题请发帖,或者如果有人有任何正确的标题发送或分隔符链接请链接!
喜欢这个答案,搞砸了一下,不是工作太糟糕! – JamesB123 2013-04-30 08:48:55
是的,我用这种方法从朋友的计算机发送一个10GB文件到不久以前。 Theres很多修补它,使事情运作良好。我很高兴你发现它有用= D – 2013-04-30 15:13:15
这是完美的谢谢! – JamesB123 2013-04-30 08:47:59