A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马张旭明 中级黑马   /  2012-9-11 22:28  /  1391 人查看  /  3 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.io.*;
import java.net.*;
class TextClient
{
    public static void main(String[] args)throws Exception
    {
       Socket s = new Socket("169.254.56.62",10006);
       BufferedReader bufr =
          new BufferedReader(new FileReader("IPDemo.java"));
       PrintWriter out = new PrintWriter(s.getOutputStream(),true);
       String line = null;
       while((line=bufr.readLine())!=null)
       {
          out.println(line);
          //out.print(line);                          //这里的原来只有out.println(line);我换成了out.ptint(line);out.print("\r\n");
          //out.print("\r\n");
       }
       //out.println("over");
       s.shutdownOutput();
      
       BufferedReader bufIn = new BufferedReader(new InputStreamReader
(s.getInputStream()));
       String str = bufIn.readLine();
       System.out.println(str);
       bufr.close();
       s.close();
    }
}
class TextServer
{
     public static void main(String[] args) throws Exception
     {
        ServerSocket ss = new ServerSocket(10006);
        Socket s = ss.accept();
        String ip = s.getInetAddress().getHostAddress();
        System.out.println(ip+"......connected");
      
        BufferedReader bufIn = new BufferedReader(new InputStreamReader
(s.getInputStream()));
        PrintWriter out = new PrintWriter(new FileWriter
("server.txt"),true);
        String line = null;
        while((line=bufIn.readLine())!=null)                       //这的readLine()没有遇到换行是会一直等待的吧
        {
            
            out.println(line);
        }
        PrintWriter pw = new PrintWriter(s.getOutputStream(),true);
        pw.println("上传成功");
        out.close();
        s.close();
        ss.close();
     }
}

老师说println自带换行,我把out.println(line);换成了out.ptint(line)运行完了也输出“上传成功”,也没有等待现象,但是文件却是空的。
接着用out.print(line);out.print("\r\n");结果和只用out.ptint(line);是一样的。
我想问自己输入换行数据为什么没传成功,没成功为什么还是执行完了,应该等待的啊。


3 个回复

倒序浏览
你这里是printWirter ,和printStream不一样,prntsteam遇到换行符就会自动刷新缓存,而printWirter不会,,他自动flush只有在遇到println,printf,格式化方法被调用的时候,所以你用println()能刷新,而用print()+换行不能刷新,所以文件是空的
回复 使用道具 举报
没有数据是因为没刷新缓冲区中的数据,没有换行标记是不能刷新的
回复 使用道具 举报
new line();
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马