直接把数据放在buffer里就行,为何还要用一个临时的文件来保存数据?

解决方案 »

  1.   

    将字节流(byte[]),而不是字符串存下(内存或文件)。
    因为有些编码需要2个或以上的字节来放一个单字,随意进行字符串转换就可能在错误的地方将多个字节间切开,造成乱码。
      

  2.   

    如果整个传输过程和写入过程编码都统一的话,是不是可以考虑这个情况也就是,一个完整的字符串,被你接收的时候,鲁莽的切断了,然后写入的时候,并没有考虑实际的长度。比如,假设对方发送了一个 500个汉字的字符串,通过GBK编码成了  1000 个字节。然后你调用 Receive 的缓存为 600 字节,那么,第一次调用收到了600 字节,写入了临时文件,第二次,实收了400字节,这个时候,你写入临时文件了多少字节?还有一个问题是,既然你要缓存,为嘛要把每次先转成字符串,再写入临时文件?另外,你是如何判断字符串接收完成了,有没有长度前缀?如果字符串数据不是太大,可以直接缓存到内存中,减少对磁盘的访问。
      

  3.   

    发完帖子之后, 我就更改将字节流(byte[])存入文件,目前测试几下是没有问题。  我这个是数据主要是SQL查询的结果。 如果加上些二进制文件的数据,还是存储在文件上比较妥当吧?
      

  4.   

    我想我的问题,主要是存在于 存入的是字符串,而不是BYTE数组,
    我在读取的时候,发现读到了一条数据的标识,我就会去清空临时文件。我现在的做法是,每次写入数据之后,用AutoResetEvent 发个信号,让读线程去读数据,
    然后判断是否收到完整的数据,没有收到就不停的等待信号才去读取, 直到读到完整的数据,我就去清空临时文件。有没有好的解决方案,我觉得这个操作还是比较耗时的。
      

  5.   

    用FileStream,不要用StreamWriter和StreamReader!
      

  6.   

    所以你干脆定义个全局的datatable存放数据还更简单