我正在用 Java 做一些套接字工作,并试图对它发送的数据进行编码。该部分工作正常,但由于某种原因,它不会通过套接字发送整个编码的字符串。它似乎在 3 的部分发送。
客户端从 MyBufferedReader 类(如下)执行一个简单的 readLine(),然后服务器像这样发送它:
private void sendFile(File f, String dest){ //The file to be sent and the destination
System.out.println("Sending file started..");
try {
this.out.println("CMD MKFILE " + dest + "/" + f.getName());
//TODO send the file
}catch(Exception e){
e.printStackTrace();
}
}
客户收到这个:
CMD MKFILE C:\Users\Lolmewn\Documents\test/dir/n/linebrea
然后再读k!.txt
MyBufferedReader 和 MyPrintWriter 类如下所示:
MyBufferedReader:
@Override
public String readLine() throws IOException {
String read = super.readLine();
System.out.println("UNDEC: " + read);
try {
System.out.println("DEC: " + decode(read));
return decode(read);
} catch (Exception e) {
e.printStackTrace();
}
return read;
}
public static String decode(String b) throws Exception {
ByteArrayInputStream bais = new ByteArrayInputStream(b.getBytes("UTF-8"));
InputStream b64is = MimeUtility.decode(bais, "base64");
byte[] tmp = new byte[b.length()];
int n = b64is.read(tmp);
byte[] res = new byte[n];
System.arraycopy(tmp, 0, res, 0, n);
return new String(res);
}
和 MyPrintWriter:
private String hash(String x) {
try {
return encode(x);
} catch (Exception e) {
e.printStackTrace();
}
return x;
}
public static String encode(String b) throws Exception {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStream b64os = MimeUtility.encode(baos, "base64");
b64os.write(b.getBytes("UTF-8"));
b64os.close();
return new String(baos.toByteArray());
}
发生了什么事,我该如何解决?
请注意:我正在对这些套接字进行异步工作,这意味着我不能只使用 while(read != null) 语句。这将导致其他不应该存在的数据也存在。