黑马程序员技术交流社区

标题: 网络编程换行的问题 [打印本页]

作者: 黑马张旭明    时间: 2012-9-11 22:28
标题: 网络编程换行的问题
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);是一样的。
我想问自己输入换行数据为什么没传成功,没成功为什么还是执行完了,应该等待的啊。



作者: 程金    时间: 2012-9-14 12:38
你这里是printWirter ,和printStream不一样,prntsteam遇到换行符就会自动刷新缓存,而printWirter不会,,他自动flush只有在遇到println,printf,格式化方法被调用的时候,所以你用println()能刷新,而用print()+换行不能刷新,所以文件是空的
作者: 李菁    时间: 2012-9-14 12:44
没有数据是因为没刷新缓冲区中的数据,没有换行标记是不能刷新的
作者: 尤圣回    时间: 2012-9-14 12:54
new line();




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2