现在这里是用于发送字符串的j2me mobile的编码:
String s="hai";
try{
String url = "btspp://001F81000250:1;authenticate=false;encrypt=false;master=false";
StreamConnection stream = null;
InputStream in;
OutputStream out;
stream = (StreamConnection) Connector.open(url);
out=stream.openOutputStream();
String s=tf.getString();
byte size=(byte) s.length();
out.write(size);
out.write(s.getBytes());
out.flush();
out.close();
stream.close();
}
catch(Exception e){
}
现在编写j2se用于接收字符串:
StreamConnectionNotifier notifier=null;
try{
String url = "btspp://localhost:"+new UUID("1101", true).toString()+";name=PCServerCOMM;authenticate=false";
System.out.println(LocalDevice.getLocalDevice().getBluetoothAddress()+"\nCreate server by uri: " + url);
notifier= (StreamConnectionNotifier) Connector.open(url);
while(true){
System.out.println("waiting....");
StreamConnection con = notifier.acceptAndOpen();
System.out.println("Got connection..");
InputStream is=con.openInputStream();
//byte b[]=new byte[40];
/*
while(is.available()>0){
System.out.print((char)is.read());
}*/
//is.read(b, 0, 40);
int size=is.read();
byte b[]=new byte[size];
is.read(b, 0, size);
File f=new File("d://test.xml");
FileOutputStream fo=new FileOutputStream(f);
fo.write(b,0,b.length);
fo.close();
con.close();
System.out.println(new String (b));
}
//printing(f);
} catch(Exception e){
JOptionPane.showConfirmDialog(new JFrame(), e.getMessage());
}
我尝试了这种编码进行数据传输,但它并不成功,因为当我们发送的字符串太长时,接收端就会出现问题。我该如何解决这个问题?
有没有其他方法可以将rms中的数据传输到j2se,如果有,请帮助我....请快速回复...
答案 0 :(得分:0)
你在这里写作和阅读的方式,只有最多255个字符的字符串,在默认编码中只有相同的字节数,写得正确。
在写作方面:
byte size=(byte) s.length();
转换字节中字符串的长度,因此只占用长度的低8位。因此,只能写入最长为255的长度。s.getBytes()
的字节数组 - 此数组可能比字符中的原始字符串更长(以字节为单位)。此转换使用发送设备的默认编码。在阅读方面:
int size=is.read();
读取之前写的长度,然后创建一个字节数组。is.read(b, 0, size);
将一些字节读入此数组 - 它不一定会填满整个数组。所以,我们有:
如何解决这个问题:
readUTF
和writeUTF
方法在那里使用它们。它们解决了所有问题(如果您的字符串在此处使用的修改后的UTF-8编码中最多占用65535个字节)。getBytes()
和new String(...)
,请使用带有明确编码名称的变体并为其提供相同的编码(我建议使用"UTF-8"
)。