源码如下:
byte[] bytearray = new byte[512];//建立内存块,使用分块传输加快io速度
int len = 0;
input = new BufferedInputStream(new FileInputStream("F:\\1018.rar"),512);
output = con.getOutputStream();
                        //先将output封装成BufferedWriter,方便写字符串
                        BufferedWriter br = new BufferedWriter(output);
                        br.write("hello Mr Server ,this is the file from DaytimeClientServlet1,please recieve\r");
                        br.flush();
                        
                        //现在我想发送字节流了,为避免从字符到字节的转换,将output包装成BufferedOutputStream
                        BufferedOutputStream bOut = new BufferedOutputStream(output,512);
while ((len = input.read(bytearray)) != -1) {
       bOut.write(bytearray, 0, len);
                                bOut.flush();
                }
      input.close();
       output.close();

解决方案 »

  1.   

    你是说你收不全吗?把你收的代码也贴出来吧。底层都是传输的byte流,只要发出了,就应该能收到
      

  2.   

    我的接收代码如下:
    FileOutputStream fw = new FileOutputStream("c:\\dest.class");    InputStream input = req.getInputStream();
        //为方便读字符串,先将input包装成BufferedReader
        BufferedReader br = new BufferedReader(new InputStreamReader(input),512);
        String x = br.readLine();//读第一句
        //br.close();
        //为测试,再将input包装成BufferedInputSteam
        String newx = new String("Server received it:" + x);
        BufferedInputStream bs = new BufferedInputStream(input);
      try{
        byte[] bytearray = new byte[512]; //建立内存块,使用分块传输加快io速度
        int len = 0;
        while ( (len = bs.read(bytearray)) != -1) {
          fw.write(bytearray, 0, len);
          fw.flush();
        }
        input.close();
        bs.close();
        fw.flush();
        fw.close();
      

  3.   

    小声请教:我没有将字符流和字节流转来转去啊。
    我本来只正对这个input使用了一个bufferedreader包装的,并将第一行以后的全部由string转为byte[],那样的话,一切正常。
    我现在为了加深自己的理解:先将input包装成一个基于字符的io对象,然后再包装成一个基于字节流
    io对象,请大家告诉我为什么这种搞法会有错?我的代码错在哪里?
    请师傅们指教!!!
      

  4.   

    我想你直接用byte做个统一吧,
    这样不容易出错
      

  5.   

    你所做的包装都是针对同一个基本的InputStream或者OutputStream来进行的
      

  6.   

    我的教训:
    InputStream is=client.getInputStream();
    BufferedReader br=new BufferedReader(new InputStreamReader(is));
    do{
    String str=br.readline();
    ......
    }while(!str.eqauls("END"));
    ObjectInputStream ois=new ObjectInputStream(is);
    ....
    ois.readObject();好像是BufferedReader多读了一些数据到buffer里,结果把ObjectInputStream的数据破坏了
    比如说ObjectInputStream里有5000bytes,2045bytes应该用BufferedReader读,但BufferedReader如果buffersize为2048,读的时候就多读了3bytes,而ObjectInputStream不知道BufferedReader的存在,就丢了3bytes,刚好是ObjectInputStream的头,结果出错.
    ....
      

  7.   

    就是说,有一部分数据丢在你的Buffer里了。
        
    BufferedReader br = new BufferedReader(new InputStreamReader(input),512);
    //读入512
    String x = br.readLine();//读第一句,读出多少,假设一行80,//还有512-80个在Buffer里
    String newx = new String("Server received it:" + x);
    BufferedInputStream bs = new BufferedInputStream(input);//不知道 br 里还有512-80个结果:丢了512-80个