黑马程序员技术交流社区

标题: readLine()方法 [打印本页]

作者: 白倩    时间: 2011-10-31 20:04
标题: readLine()方法
明白了之前写的程序为什么会一直的等待着,阻塞着不向下运行,readLine()方法,它是一个阻塞式方法,只有读到了回车换行符后才能运行后面的代码!
作者: 成杰    时间: 2011-10-31 20:31
是这样的!
作者: 刘福双    时间: 2011-10-31 20:54
刚好视频我也看到这里:
这事一个UDP数据接收端通过循环可以无限的接收数据,但是发送端必须发数据接收端才可以循环
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class asd {

        /**
         * @param args
         * @throws IOException
         */
        public static void main(String[] args) throws IOException {
                // TODO Auto-generated method stub

                DatagramSocket ds = new DatagramSocket(8888);
                while (true) {
                        byte[] buf = new byte[1024];
                        DatagramPacket dp = new DatagramPacket(buf, buf.length);
                        ds.receive(dp);//阻塞是方法
                        /*
                         * whlie循环中true可以无限循环
                         * 但是阻塞是方法可以让程序停止
                         * 并等到接收数据后在循环
                         */
                        String ip=dp.getAddress().getHostAddress();
                        String data=new String(dp.getData(),0,dp.getLength());
                        int port=dp.getPort();
                        System.out.println(ip+"::"+data+"::"+port);
                }
        }

}
wait()方法也可以实现阻塞
作者: 田忠    时间: 2011-10-31 22:33
学习了,
作者: 邱本超老师    时间: 2011-11-1 12:33
模拟的readLine方法MyreadLine方法,读到\n才会返回
package io;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
//自定义的MyreadLine方法
class MyBufferedReader{
        FileReader r=null;
       
    public MyBufferedReader(FileReader r) {
                super();
                this.r = r;
        }
   
    public String MyreadLine() throws IOException{
            int ch=0;
            StringBuilder sb=new StringBuilder();
            while((ch=r.read())!=-1){
                    if(ch=='\r'){
                            continue;
                    }
                    if(ch=='\n'){
                            return sb.toString();
                    }
                    else{
                            sb.append((char)ch);
                    }
            }
           
            if(sb.length()!=0){//如果文本文件最后一个没有回车,则直接返回
                    return sb.toString();
            }
            return null;
    }
   
    public void Myclose()throws IOException {
            r.close();
    }
   
}
public class MyBufferedReaderDemo {
    public static void main(String[] args){
            try {
                        FileReader fr=new FileReader("D:/javaworkplace/heima/src/io/FileReaderDemo2.java");
                        MyBufferedReader buf=new MyBufferedReader(fr);
                        String line=null;
                        try {
                                while((line=buf.MyreadLine())!=null){
                                        System.out.println(line);
                                }
                        } catch (IOException e) {
                                e.printStackTrace();
                        }
                        finally{
                                try {
                                        buf.Myclose();
                                } catch (IOException e) {
                                        e.printStackTrace();
                                }
                        }
                } catch (FileNotFoundException e) {
                        e.printStackTrace();
                }
               
    }
}
作者: 黄健    时间: 2011-11-1 12:55
当一个文本文件中最后一行没有换行符时,它也会返回的




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