黑马程序员技术交流社区

标题: 有谁能说一下关于IO流的阻塞的定义以及原因 [打印本页]

作者: 填rui    时间: 2018-1-28 22:30
标题: 有谁能说一下关于IO流的阻塞的定义以及原因
我下面这段代码运行就会出问题,不是报错和异常,而是好像卡带了...客户端的代码

[Java] 纯文本查看 复制代码
Socket socket = null;
        PrintWriter pw = null;
        Scanner sc = new Scanner(System.in);
        InputStreamReader isr = null;
        BufferedReader br = null;

        public Client() {
                try {
                        System.out.println("客户端");
                        socket = new Socket("127.0.0.1", 55555);
                        pw = new PrintWriter(socket.getOutputStream());
                        pw.println("aaaa");
//注意看这里
//pw.flush();

                        socket = new ServerSocket(12345).accept();
                        isr = new InputStreamReader(socket.getInputStream());
                        br = new BufferedReader(isr);
                        String word = br.readLine();
                        System.out.println(word);
                } catch (IOException e) {
                        e.printStackTrace();
                } finally {
                        try {
                                if(br != null) {
                                        br.close();
                                }
                        } catch (IOException e1) {
                                e1.printStackTrace();
                        } finally {
                                if(pw != null) {
                                        pw.close();
                                }
                                try {
                                        if( socket!= null) {
                                                socket.close();
                                        }
                                } catch (IOException e) {
                                        e.printStackTrace();
                                }
                        }
}
                }



服务器端的代码
[Java] 纯文本查看 复制代码
ServerSocket serverSocket = null;
        Socket socket = null;
        InputStreamReader isr = null;
        BufferedReader br = null;
        PrintWriter pw = null;

        public Server() {
                try {
                        System.out.println("服务器");
                        serverSocket = new ServerSocket(55555);
                        socket = serverSocket.accept();
                        isr = new InputStreamReader(socket.getInputStream());
                        br = new BufferedReader(isr);
                        String word = br.readLine();
                        System.out.println(word);

                        Socket socket = new Socket("127.0.0.1", 12345);
                        pw = new PrintWriter(socket.getOutputStream());
                        pw.println("连接成功");
//注意看这里
//pw.flush();
                } catch (IOException e) {
                        e.printStackTrace();
                } finally {
                        if(pw != null) {
                                pw.close();
                        }
                        try {
                                if(br != null) {
                                        br.close();
                                }
                        } catch (IOException e) {
                                e.printStackTrace();
                        } finally {
                                try {
                                        if(socket != null) {
                                                socket.close();
                                        }
                                } catch (IOException e) {
                                        e.printStackTrace();
                                }
                        }
                }
        }



当我解开那两行 pw.flush(); 代码时,程序的卡带问题就没有了。
有人能说一下IO流的阻塞问题吗?

作者: IMZero    时间: 2018-1-29 22:42
首先弄明白pw.flush()这行代码的作用,刷新缓存区,将缓存区的数据输出到指定地方。如果不刷新,也可以,但是必须要关流,就是释放资源,pw.close(),关流之后数据也是会输出到指定地方的。看了你的代码,你的代码中并没有关流这个操作,所以如果你既没有刷新,也没有关流的话,你的数据是只会读取到内存中,所以就出现了你所说的卡带问题!
作者: IMZero    时间: 2018-1-29 22:46
本帖最后由 IMZero 于 2018-1-29 23:46 编辑

居然发出去了,我还以为没有发出去





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