TCP通信中,BufferedWriter和PrintWriter用来实现输出流的实现方式与区别

区别:
1. PrintWriter的print、println方法可以接受任意类型的参数,而BufferedWriter的write方法只能接受字符、字符数组和字符串;
2. PrintWriter的println方法自动添加换行,BufferedWriter需要显示调用newLine方法;
3. PrintWriter的方法不会抛异常,若关心异常,需要调用checkError方法看是否有异常发生;
4. PrintWriter构造方法可指定参数,实现自动刷新缓存(autoflush);
5. PrintWriter的构造方法更广。
网络TCP编程中,可以使用PrintWriter,也可以使用BufferedWriter,代码如下:
服务器端:

package TCP;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.*;

public class MyTcp {
        private BufferedReader reader;
        private ServerSocket server;
        private Socket socket;
        void getserver(){
            try {
                server=new ServerSocket(8998);
                System.out.println("服务器套接字已经创建成功");
                while(true)
                {
                    System.out.println("等待客户机连接");
                    socket=server.accept();
                    reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
                    getClientMessage();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
        private void getClientMessage() {
            // TODO Auto-generated method stub
            try {
            while(true)
            {

                    System.out.println("客户机:"+reader.readLine());

            }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

                try {
                    if(reader!=null)
                        reader.close();
                    if(socket!=null)
                        socket.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
        }
        public static void main(String args[])
        {
            MyTcp tcp = new MyTcp();
            tcp.getserver();
        }
}

客户端:

package 网络通信客户端;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;

import javax.swing.JFrame;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.BevelBorder;

public class MyClient extends JFrame{
    private BufferedWriter writer;
    //private PrintWriter writer;
    Socket socket;
    private JTextArea ta = new JTextArea();
    private JTextField tf=new JTextField();
    Container cc;
    public MyClient(String title)
    {
        super(title);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        cc=this.getContentPane();
        final JScrollPane scrollPane=new JScrollPane();
        scrollPane.setBorder(new BevelBorder(BevelBorder.RAISED));
        getContentPane().add(scrollPane,BorderLayout.CENTER);
        scrollPane.setViewportView(ta);
        cc.add(tf,"South");
        tf.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                try {
                writer.write(tf.getText());
                writer.newLine();
                writer.flush();//使用BufferedWriter和PrintWriter都行,后者更方便,PrintWriter拥有跨平台的换行符输入,且自动刷新。
                //writer.println(tf.getText);
                ta.append(tf.getText()+'\n');
                ta.setSelectionEnd(ta.getText().length());
                tf.setText("");
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            }
        });
    }
    private void connect(){
        ta.append("尝试连接\n");
        try {
            socket = new Socket("127.0.0.1",8998);
            writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            //writer=new PrintWriter(socket.getOutpuStream());
            ta.append("完成连接");
        } catch (Exception e) {
            // TODO: handle exception
        }
    }
    public static void main(String args[])
    {
        MyClient client = new MyClient("向服务器发送数据");
        client.setSize(200,200);
        client.setVisible(true);
        client.connect();

    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用以下代码实现: import java.io.*; public class FileIO { public static void main(String[] args) { try { BufferedReader reader = new BufferedReader(new FileReader("input.txt")); BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt")); String line; while ((line = reader.readLine()) != null) { writer.write(line); writer.newLine(); } reader.close(); writer.close(); } catch (IOException e) { e.printStackTrace(); } } } 这段代码可以从名为"input.txt"的文件读取字符串,并将其写入名为"output.txt"的文件。在代码,使用了BufferedReader和BufferedWriter实现输入输出,并且使用了异常处理来避免程序出错。 ### 回答2: 利用BufferedReader和BufferedWriter可以实现在文件进行字符串的输入输出操作。首先,我们需要创建一个BufferedReader实例用于读取文件内容,并将相应异常进行处理。接着,我们需要创建一个BufferedWriter实例用于向文件写入内容。在写入过程也要处理可能出现的异常。下面是一个实现该功能的代码示例: ```java import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class FileIOExample { public static void main(String[] args) { // 指定要读取的文件路径 String inputFilePath = "input.txt"; // 指定要写入的文件路径 String outputFilePath = "output.txt"; try { // 创建BufferedReader实例用于读取文件内容 BufferedReader reader = new BufferedReader(new FileReader(inputFilePath)); // 创建BufferedWriter实例用于写入文件内容 BufferedWriter writer = new BufferedWriter(new FileWriter(outputFilePath)); String line; // 逐行读取文件内容并写入到另一个文件 while ((line = reader.readLine()) != null) { writer.write(line); writer.newLine(); // 换行 } // 关闭资源 reader.close(); writer.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 在上述代码,我们首先指定了要读取的文件路径和要写入的文件路径。然后,通过使用BufferedReader读取输入文件的内容,并使用BufferedWriter将读取到的内容逐行写入到指定的输出文件。在处理文件时,我们使用try-catch语句来捕获和处理可能出现的IOException异常。最后,我们在代码的最后关闭了BufferedReader和BufferedWriter以释放相关资源。 以上是一个利用BufferedReader和BufferedWriter在文件实现输入输出字符串的简单示例,通过合理处理异常,可以保证程序的正常运行并防止潜在的错误。 ### 回答3: 可以使用BufferedReader和BufferedWriter类在文件实现输入输出字符串。首先,我们需要在程序引入java.io包来使用这两个类。然后,我们可以使用try-catch块来处理文件的异常情况。 ```java import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class FileIOExample { public static void main(String[] args) { try { // 从文件读取字符串 BufferedReader reader = new BufferedReader(new FileReader("input.txt")); String line = reader.readLine(); reader.close(); // 写入字符串到文件 BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt")); writer.write(line); writer.close(); System.out.println("成功将字符串从input.txt复制到output.txt文件。"); } catch (IOException e) { System.out.println("发生了IO异常: " + e.getMessage()); e.printStackTrace(); } } } ``` 在上述代码,我们首先创建一个BufferedReader对象,并传入一个FileReader对象来读取文件的内容。然后,使用BufferedReader的readLine()方法来读取文件的一行内容,并将其存储在字符串变量line。接下来,我们关闭BufferedReader对象。 然后,我们创建一个BufferedWriter对象,并传入一个FileWriter对象来写入文件。使用BufferedWriterwrite()方法,我们将line的字符串写入到文件。最后,我们关闭BufferedWriter对象。 在try-catch块,我们捕获任何可能发生的IOException,并打印相应的错误信息和堆栈跟踪。这样,我们可以及时处理可能出现的异常情况。 值得注意的是,上述的代码使用的是相对路径,因此需要确保在当前工作目录下存在一个名为"input.txt"的输入文件。或者可以根据需要更改为相应的文件路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值