您的位置:首页 > 理论基础 > 计算机网络

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

2015-05-22 17:05 423 查看
区别:

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();

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: