out.writeUTF
时间: 2023-06-09 14:03:24 浏览: 107
"out.writeUTF" 是 Java 中的一种方法,用于将字符串数据写入输出流中。这个方法会将字符串先转换成 UTF-8 格式,然后再写入输出流中。一般情况下,这个方法常用于网络编程中,用于将数据发送给远程服务器。
相关问题
优化下面代码package Y; import java.io.*; import java.net.*; import java.time.*; import java.util.*; public class Shiyan5Server { public static void main(String[] args) { ServerSocket server = null; Sy5ServerThread thread; Socket you = null; while(true) { try { server = new ServerSocket(2010); } catch (IOException e) { System.out.println("正在监听"); // TODO: handle exception } try { System.out.println("等待客户呼叫"); you = server.accept(); System.out.println("客户的地址"+you.getInetAddress()); } catch (Exception e) { // TODO: handle exception System.out.println("正在等待客户"); } if (you != null) { new Sy5ServerThread(you).start(); } } } } class Sy5ServerThread extends Thread{ Socket socket; DataOutputStream out = null; DataInputStream in = null; String s = null; Sy5ServerThread(Socket t) { socket = t; try { out = new DataOutputStream(socket.getOutputStream()); in = new DataInputStream(socket.getInputStream()); } catch (Exception e) { // TODO: handle exception } } public void run() { while(true) { try { String S1 = "几点了?"; String S2 = "今天是几号?"; String S3 = "今天是星期几?"; String st = in.readUTF(); if (st.equals(S1)) { LocalTime time = LocalTime.now(); String Time = String.format("%tR", time); out.writeUTF(Time); } else if(st.equals(S2)) { LocalDate date = LocalDate.now(); String Time = String.format("%tm月%td日", date,date); out.writeUTF(Time); }else if (st.equals(S3)) { LocalDate week = LocalDate.now(); String Time = String.format("%tA", week); out.writeUTF(Time); }else { System.out.println("服务结束"); break; } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }} } }
以下是代码的优化:
1. 将ServerSocket的创建放在while循环的外部,否则每次循环都会重新创建一个ServerSocket对象,浪费资源。
2. 在catch语句中添加具体的异常处理代码,避免出现异常时程序无法正常执行。
3. 在Sy5ServerThread类的构造函数中,将out和in的初始化放在try语句块中,避免出现异常时无法正确初始化。
4. 将字符串常量定义为静态常量,避免在运行时重复创建对象,浪费资源。
5. 在while循环中添加try-catch语句,避免出现异常时程序中断。
改进后的代码如下:
```
package Y;
import java.io.*;
import java.net.*;
import java.time.*;
import java.util.*;
public class Shiyan5Server {
private static final String S1 = "几点了?";
private static final String S2 = "今天是几号?";
private static final String S3 = "今天是星期几?";
public static void main(String[] args) {
ServerSocket server = null;
Socket you = null;
try {
server = new ServerSocket(2010);
System.out.println("正在监听");
} catch (IOException e) {
e.printStackTrace();
}
while (true) {
try {
System.out.println("等待客户呼叫");
you = server.accept();
System.out.println("客户的地址" + you.getInetAddress());
new Sy5ServerThread(you).start();
} catch (Exception e) {
System.out.println("正在等待客户");
e.printStackTrace();
}
}
}
}
class Sy5ServerThread extends Thread {
private static final String S1 = "几点了?";
private static final String S2 = "今天是几号?";
private static final String S3 = "今天是星期几?";
private Socket socket;
private DataOutputStream out;
private DataInputStream in;
Sy5ServerThread(Socket t) {
socket = t;
try {
out = new DataOutputStream(socket.getOutputStream());
in = new DataInputStream(socket.getInputStream());
} catch (IOException e) {
e.printStackTrace();
}
}
public void run() {
while (true) {
try {
String st = in.readUTF();
if (st.equals(S1)) {
LocalTime time = LocalTime.now();
String Time = String.format("%tR", time);
out.writeUTF(Time);
} else if (st.equals(S2)) {
LocalDate date = LocalDate.now();
String Time = String.format("%tm月%td日", date, date);
out.writeUTF(Time);
} else if (st.equals(S3)) {
LocalDate week = LocalDate.now();
String Time = String.format("%tA", week);
out.writeUTF(Time);
} else {
System.out.println("服务结束");
break;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
```
已知一个二进制文件,文件名为dict.dic。它是由下边的代码生成。 int a ; boolean b = true ; double c , f ; String d ; DataOutputStream out = new DataOutputStream( new FileOutputStream("dict.dic")); Scanner cin = new Scanner(System.in); for (int i = 0 ; i < 5 ; i ++ ) { a = cin.nextInt() ; f = Math.random() ; if ( f > 0.5 ) b = true ; else b = false ; c = cin.nextDouble() ; d = cin.next() ; out.writeInt(a); out.writeBoolean(b); out.writeDouble(c); out.writeUTF(d); } out.close(); // Remember this! cin.close(); } 你的任务是写一段程序,将这些内容读出来。
下面是一个读取 dict.dic 文件的代码范例:
```java
import java.io.*;
import java.util.Scanner;
public class ReadDict {
public static void main(String[] args) throws IOException {
DataInputStream in = new DataInputStream(new FileInputStream("dict.dic"));
for (int i = 0; i < 5; i++) {
int a = in.readInt();
boolean b = in.readBoolean();
double c = in.readDouble();
String d = in.readUTF();
System.out.println("a = " + a + ", b = " + b + ", c = " + c + ", d = " + d);
}
in.close();
}
}
```
这个程序使用了 `DataInputStream` 来读取二进制文件,其中的 `readInt()`、`readBoolean()`、`readDouble()` 和 `readUTF()` 方法与 `DataOutputStream` 中的对应方法配合使用。最后别忘了关闭输入流。