调用bufferedoutputstream的flush()即可.

解决方案 »

  1.   

    你的buffer设置的多大?每次都flush()了吗?
    直接调用外层的flush()就可以。
      

  2.   

    各位多星上将,我时刻注意了调用flush方法,其他的几个问题也请回答我吧!我最佩服几颗三角的人了!!!!!!!!!!!!!!!!
      

  3.   

    各位兄弟,不要只看一眼就不管俺的痛苦了!!!!
    我的buf设的是512,我将部分代码贴出:
    BufferedInputStream input=null;
                    OutputStream output=null;
                    try {
    byte[] bytearray = new byte[512];//建立内存块,使用分块传输加快io速度
    int len = 0;
    input = new BufferedInputStream(new FileInputStream("F:\\1018.rar"),512);
    output = con.getOutputStream();
                            BufferedOutputStream bOut = new BufferedOutputStream(output,512); 
                            /*
    PrintWriter pr = new PrintWriter(new OutputStreamWriter(output));
    pr.print("hello Mr Server ,this is the file from DaytimeClientServlet1,please recieve\n");
    pr.close();//close中会先flush
                            */
                           bOut.write("hello Mr Server ,this is the file from DaytimeClientServlet1,please recieve\r".getBytes(),0,"hello Mr Server ,this is the file from DaytimeClientServlet1,please recieve\r".getBytes().length);
                           bOut.flush();
    while ((len = input.read(bytearray)) != -1) {
           bOut.write(bytearray, 0, len);
                                   bOut.flush();
                    }
          input.close();
           output.close();
      

  4.   

    不用每次都调用flush,Buffered也根本不会导致OutofMemoryError,Buffer满了自然会flush的。你的OutofMemory到底在哪端报错?Server还是client?把对面的另一般代码贴出来。怀疑你把接受到的文件数据都放在内存中而不是磁盘或者其他外存上。
      

  5.   

    BufferedWriter fw = new BufferedWriter(new FileWriter("c:\\dest.class"),512);
        InputStream input = req.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(input),512);
        String x = br.readLine();//读第一句
      try{
        String newx = new String("Server received it:" + x);
        char[] chararray = new char[512]; //建立内存块,使用分块传输加快io速度
        int len = 0;
        while ( (len = br.read(chararray)) != -1) {
          fw.write(chararray, 0, len);
          fw.flush();
        }
        input.close();
        fw.close();
    这是我的服务端读取的代码,我想把它以别的文件名林村
      

  6.   

    RandomAccessFile inFile = new 
    RandomAccessFile(dir+"/"+str,"rw"); 
    Socket tempSocket = new Socket(host,tempPort); 
    InputStream inSocket 
    = tempSocket.getInputStream(); 
    byte byteBuffer[] = new byte[1024]; 
    int amount; 
    try{ 
    while((amount =inSocket.read(byteBuffer) )!= -1){ 
    inFile.write(byteBuffer, 0, amount); 

    inSocket.close(); 
    out.println("226 transfer complete"); 
    inFile.close(); 
    tempSocket.close(); 

    catch(IOException e){} 

    楼主看看这段代码
    用java来实现ftp的
      

  7.   

    我注意到怎么用HttpServlet来做这些? 因为你传送文件走的并不是HTTP协议, 是你自己安排的一些什么hello的东东. 如果要通过HTTP上传文件, 你可以使用一个上传组件, 或者自己实现. 如果是专门的文件传输你可以自己写一个C/S程序. 你通过URLConnection.getOutputStream向HTTP服务器写入数据, 服务器会按照HTTP协议解释你的东西, 因为你没有发送HTTP Header这些东西, 你文件中很可能也没有两次\r\n表示HEADER终止, 它很有可能将这些存放到内存中, 尝试按照HTTP HEADER进行解释, 最终导致OutofMemory. 真搞不懂楼主为何弄出来这样奇怪的东西.最后再告诫楼主, 看你传送的应该是.class, 或者rar这样的文件, 除了文本外, 不要使用Reader/Writer.