两种书写方式,后者比前者有什么优势呢?
这段代码,其功能是从客服端读取小写字母字符串,然后返回给客服端大写字母字符串。
这是教程里的代码:
package cn.dzr.tcp.tran;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class TranService2
{
public static void main(String[] args) throws IOException
{
ServerSocket ss = new ServerSocket(10004);
Socket s = ss.accept();
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip+"....connected!");
BufferedReader bufIn = new BufferedReader(new
InputStreamReader(s.getInputStream()));
PrintWriter out = new PrintWriter(s.getOutputStream(),true);
String line = null;
while((line = bufIn.readLine())!= null)
{
System.out.println(line);
out.println(line.toUpperCase());
}
}
}
下面是我自己写的。
package cn.dzr.tcp.tran;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TranService
{
public static void main(String[] args) throws IOException
{
/*
* 1,建立服务端socket对象 ServerSocket
* 2,与客服端进行连接
* 3,读取客服端输入的字母
* 4,将字母改成大写,传回给客服端
*/
System.out.println("翻译服务端启动......");
ServerSocket ss = new ServerSocket(10003);
Socket s = ss.accept();
InputStream in = s.getInputStream();
OutputStream out = s.getOutputStream();
while(true)
{
byte[] buff = new byte[1024];
int len = in.read(buff);
String str = new String(buff,0,len);
if(str.equals("over"))
{
break;
}
System.out.println(str);
String str2 = str.toUpperCase();
out.write(str2.getBytes());
}
ss.close();
}
}
教程里的,相比我自己写的,有哪些地方要好呢?
[解决办法]
如果不需要按行判断字符串的话,感觉你这样也挺好的。
byte[] buff = new byte[1024];还是放在循环外面比较好(只需要声明一次即可)。
另外,建议if(str.equals("over"))改为,if(str.endWith("over"))。当然,这个也看需求吧。
[解决办法]
BufferedReader的优势是能行读取,在这没有太多优势吧
[解决办法]
BufferdReader是Reader的封装类,速度更快。优化过的。