楼主说的流格式 是什么,不是直接 得到的是  inputStream字节流么?  楼主指的是 什么流格式?

解决方案 »

  1.   

    谢谢你们的回复!
    我在客户端将一个文件输出成流,通过socket传输,服务器读取流的内容,保存为本地的文件,但是服务器是不知道客户端传的是什么格式的文件,就不知如何保存。
      

  2.   

    流是没有格式的。
    一般是通过截取特定长度的byte[],  
    或判断byte[],直到byte里的值与自己设定的那个结束的那个值相同为止。截去头部,剩下的按特定格式保存。
      

  3.   

    你做CS架构的应用,数据传输是提前约定的。比如你客户端和服务器端都定义一个10k大小的byte数组,客户端把要发送的数据读到数组中,数组读满或者数据读完开始发送,服务器端用数组接收,数组读满了或者数据传完了开始写入文件中。一般的话数据都是加密传输的。
    至于文件名和文件格式,你也可以自己实现,很简单方便的。你定义一个文件开始传输和文件传输结束的标志。先发送文件传输标志,然后发送文件名和文件格式。当接收方检测到你要开始传输一个文件了。首先从你发送的数据中读取文件和文件名,一般服务器的文件名要处理下,比如日期加文件名。然后在服务器相应目录建立该文件,完了就是读写数据了。最后收到传输结束标志关闭输出流,关闭文件。
    不知道你是TCP还是UDP不过都差不多。TCP传输可靠,UDP效率高。
      

  4.   

    谢谢, 终于实现了~~
    把文件后缀的长度和后缀名转成字节先传输过去,在服务器端进行截取,根据实践,传到服务器的要进行trim去掉空字节。还有个问题,后缀的长度是变化的,当超过4个字节时(尽管这种情况很少出现),应该如何去判断?
    能不能指定字节长度,不够时自动补齐字节。
      

  5.   

    谢谢, 终于实现了~~
    把文件后缀的长度和后缀名转成字节先传输过去,在服务器端进行截取,根据实践,传到服务器的要进行trim去掉空字节。还有个问题,后缀的长度是变化的,当超过4个字节时(尽管这种情况很少出现),应该如何去判断?
    能不能指定字节长度,不够时自动补齐字节。
    正常情况下文件的后缀名是最后一个“.”开始往后的才是。比如“新建文本文档.doc.rmvb.pdf.txt”不管它多少个“.”最后一个还是".txt"所以你只需要用String类的lastIndexOf检查接收的字符串,前面的是文件名,后面的是后缀名。而且不要用trim方法去空格,因为文件名有空格很正常。
      

  6.   

    谢谢, 终于实现了~~
    把文件后缀的长度和后缀名转成字节先传输过去,在服务器端进行截取,根据实践,传到服务器的要进行trim去掉空字节。还有个问题,后缀的长度是变化的,当超过4个字节时(尽管这种情况很少出现),应该如何去判断?
    能不能指定字节长度,不够时自动补齐字节。
    正常情况下文件的后缀名是最后一个“.”开始往后的才是。比如“新建文本文档.doc.rmvb.pdf.txt”不管它多少个“.”最后一个还是".txt"所以你只需要用String类的lastIndexOf检查接收的字符串,前面的是文件名,后面的是后缀名。而且不要用trim方法去空格,因为文件名有空格很正常。服务器读取后缀长和名称时,用的一个固定字节缓存,当读取的字符不够时,会自动补齐,没有trim时,保存时是看上去文件名称是对的,但是打开报格式不支持,长按进行重命名,后退10下,才开始删字符,后缀前面也有空的,不删时是看不出来的
      

  7.   

    谢谢, 终于实现了~~
    把文件后缀的长度和后缀名转成字节先传输过去,在服务器端进行截取,根据实践,传到服务器的要进行trim去掉空字节。还有个问题,后缀的长度是变化的,当超过4个字节时(尽管这种情况很少出现),应该如何去判断?
    能不能指定字节长度,不够时自动补齐字节。
    正常情况下文件的后缀名是最后一个“.”开始往后的才是。比如“新建文本文档.doc.rmvb.pdf.txt”不管它多少个“.”最后一个还是".txt"所以你只需要用String类的lastIndexOf检查接收的字符串,前面的是文件名,后面的是后缀名。而且不要用trim方法去空格,因为文件名有空格很正常。服务器读取后缀长和名称时,用的一个固定字节缓存,当读取的字符不够时,会自动补齐,没有trim时,保存时是看上去文件名称是对的,但是打开报格式不支持,长按进行重命名,后退10下,才开始删字符,后缀前面也有空的,不删时是看不出来的
    我知道你的意思了。数组不像其他集合,元素不够时会在后面自动用初始值补充,所以会有空格。其实C/S架构数据传输不是你想的这样的,很多都是提前约定好的。比如传输byte字节数组的话,根据你定的数组长度会把数组前几位元素独立出来。用来存放传输的数组实际长度。比如数组实际长度100,对应的byte字节就是49, 48, 48,多出来的用0填充。服务器端收到数据后先把约定好的前几位数组元素读出来,完了把0前面的解析成int值,然后根据起始索引和实际长度解析数组。不然你定义的数组长度是1024*1024但是就传送了10个元素,服务器端还是解析固定长,不浪费资源么。
    做C/S架构的软件就是这样,很多东西都是自己定义,怎么方便,效率高怎么来,所以需要考虑的就要很全面了。