当前位置: 首页 > 面试题库 >

Java-了解PrintWriter和冲洗需求

弘思聪
2023-03-14
问题内容

好的,首先我为所有代码道歉,但是我觉得太多的代码总比不够好。我正在努力做一个简单的聊天客户端和印刷作家。使用现在的代码,它将与服务器类进行交互,并且可以很好地进行打印并打印我想要打印的内容。但是,当我删除’writer.flush();’时
它将停止打印。以我的理解-这显然是错误的-‘writer.println(outgoing.getText());’
应该就足够了,因为这会发送试图发送到服务器的文本。我知道冲洗会强制所有信息写入,但是当我已经写了我想写的东西时为什么要这样做?

public class SimpleChatClientA {

    JTextArea incoming;
    JTextField outgoing;
    BufferedReader reader;
    PrintWriter writer;
    Socket sock;

    public void go(){

        JFrame frame = new JFrame("Ludicrously Simple Chat Client");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel mainPanel = new JPanel();

        incoming = new JTextArea(15,50);
        incoming.setLineWrap(true);
        incoming.setWrapStyleWord(true);
        incoming.setEditable(false);

        JScrollPane qScroller = new JScrollPane(incoming);
        qScroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        qScroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);

        outgoing = new JTextField(20);

        JButton sendButton = new JButton("Send");
        sendButton.addActionListener(new SendButtonListener());

        mainPanel.add(qScroller);
        mainPanel.add(outgoing);
        mainPanel.add(sendButton);
        setUpNetworking();

        Thread readerThread = new Thread(new IncomingReader());
        readerThread.start();

        frame.getContentPane().add(BorderLayout.CENTER, mainPanel);
        frame.setSize(400, 500);
        frame.setVisible(true);


    }//close go

    public void setUpNetworking(){
        try{

            sock = new Socket("127.0.0.1", 5000);

            InputStreamReader streamReader = new InputStreamReader(sock.getInputStream());

            reader = new BufferedReader(streamReader);
            writer = new PrintWriter(sock.getOutputStream());
            System.out.println("network established");
        }catch(Exception e){
            e.printStackTrace();
        }
    }//close setupnetworking

    public class SendButtonListener implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent e) {

            try{
                writer.println(outgoing.getText());
                writer.flush();
            }catch(Exception ex){
                ex.printStackTrace();
            }
            outgoing.setText("");
            outgoing.requestFocus();
        }

    }//close sendbuttonlistener inner class


    public class IncomingReader implements Runnable{

        public void run(){
            String message;
            try{

                while((message = reader.readLine()) != null){
                    System.out.println("read " + message);
                    incoming.append(message + "\n");
                }

            }catch(Exception e){
                e.printStackTrace();
            }
        }

    }//close inner class incomingreader


    public static void main(String[] args){
        new SimpleChatClientA().go();
    }


}

在此先感谢您,如果我能提供更多信息,请让我知道我第一次正确发布到stackoverflow。


问题答案:

仅当启用属性println()时,PrintWriter类的方法才将数据“提交”到流中autoFlush

查看Java文档中的以下引用:

如果启用了自动刷新,则仅在调用println,printf或format方法之一时才执行

链接到Java文档:https
:
//docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html#PrintWriter(
java.io.OutputStream,%
20boolean)

如果需要将消息发送到服务器,请PrintWriter在启用“自动刷新”选项的情况下创建对象。

因此,在创建writer对象的地方,只需执行以下操作:

writer = new PrintWriter(sock.getOutputStream(), true);

那应该做。希望能帮助到你!



 类似资料:
  • 主要内容:1 什么是Java PrintWriter,2 Java PrintWriter的语法,3 Java PrintWriter的方法,4 Java PrintWriter的例子1 什么是Java PrintWriter Java PrintWriter类是Writer类的实现。它用于将格式化的对象表示形式打印到文本输出流。 2 Java PrintWriter的语法 3 Java PrintWriter的方法 方法 描述 PrintWriter append(char c) 输出指定的布

  • 问题内容: 我在php页面中使用了无限循环功能,它每秒都会回显一个文本。当我在浏览器中打开页面时,它起作用了!但是当我通过jquery ajax加载它时没有响应! php页面 jQuery代码 问题答案: 不能仅使用$ .get来完成HTTP流传输 插入如下:http : //ajaxpatterns.org/archive/HTTP_Streaming.php。 HTTP流是一个非常复杂的技巧。

  • 问题内容: '; ob_flush(); flush(); 我有专用的服务器,因此可以进行更改。我正在运行apache和nginx作为代理服务器。 问题答案: 您正在使用,而没有,因此没有需要冲洗的东西。 它还取决于Web服务器和代理及其设置。 您应该禁用Nginx的缓冲(添加到配置文件并重新启动Nginx) 另外,检查您的 php.ini是否 包含和。

  • 本文向大家介绍C++ 冲洗刷新流,包括了C++ 冲洗刷新流的使用技巧和注意事项,需要的朋友参考一下 示例 默认情况下,文件流以及许多其他类型的流都被缓冲。这意味着写入流可能不会导致基础文件立即更改。为了迫使所有缓冲的写操作立即进行,可以刷新流。您可以直接通过调用flush()方法或通过std::flush流操纵器来执行此操作: 有一个流操纵器std::endl,结合了编写换行符和刷新流: 缓冲可以

  • 如果有人能用简单的术语回答这些与火花洗牌相关的问题,我将不胜感激。 在spark中,当加载一个数据集时,我们指定分区的数量,这表示输入数据(RDD)应该被划分为多少个块,并且根据分区的数量启动相等数量的任务(如果假设错误,请纠正我)。对于工作节点中的X个核心数。一次运行相应的X个任务。 沿着类似的思路,这里有几个问题。 因为,所有byKey操作以及联合、重新分区、连接和共组都会导致数据混乱。 >

  • 问题内容: 我是Java的新手。我想做一个游戏。经过大量研究,我不了解缓冲策略的工作原理。.我了解基础知识..它创建了一个屏幕外图像,您以后可以将其放入Windows对象中。 我不知道..我已经研究了很长时间了..根本没有运气..我不知道..也许所有的东西都在里面,而且它很清楚很简单,我我太愚蠢而看不见.. 感谢所有的帮助.. :) 问题答案: 运作方式如下: 该构造了一个当你调用。该知道它属于那