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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 白倩 黑马帝   /  2011-10-31 20:04  /  2382 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

明白了之前写的程序为什么会一直的等待着,阻塞着不向下运行,readLine()方法,它是一个阻塞式方法,只有读到了回车换行符后才能运行后面的代码!

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 谢谢分享。

查看全部评分

5 个回复

倒序浏览
成杰 黑马帝 2011-10-31 20:31:51
沙发
是这样的!
回复 使用道具 举报
刚好视频我也看到这里:
这事一个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()方法也可以实现阻塞

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
学习了,
回复 使用道具 举报
模拟的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();
                }
               
    }
}
回复 使用道具 举报
当一个文本文件中最后一行没有换行符时,它也会返回的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马