看看这样行不行(没试验过): 发送: for (int i = 0; i < data.size(); i++) { out.write(data.elementAt(i).toString().getBytes()); out.flush(); sleep(100); } 接受: for (;;) { byte[] readBuffer = new byte[255]; in.read(readBuffer); reData = new String(readBuffer); <do some process> } 就是每一行刷一次
to xitianjile(西天) 是读一行,如: a 123.45,234.5,234.57,456.43to cfsego(陈传文) 我试试看。
java里面好像不能设置特殊点读的.
cfsego(陈传文)的方法不行。 那有什么方法可以实现呢?大家可以做做。
a 123.45,234.5,234.57,456.43&我每行加个&结束符发送也是没用的。因为我读的时候没有办法让它就读到这个标志符这里。
for (int i = 0; i < data.size(); i++) { out.write(data.elementAt(i).toString().getBytes()); out.write("\n"); sleep(100); } 接受: for (;;) { byte[] readBuffer = new byte[255]; in.readLine(readBuffer); //就是读一行 reData = new String(readBuffer); <do some process> }
以上各位的方法都不行。 to wjsfr(令狐葱) 用dos.writeUTF(test[i]);只能发送一部分数据,如果达到1000多条的话就发不出去,不信你试试看。 to cfsego(陈传文) 我用的是j2se的缩小版本,in.readLine(readBuffer); 在in里面没有readLine()这个方法。
回复人: cfsego(陈传文) 这就行呀! for (int i = 0; i < data.size(); i++) { out.write(data.elementAt(i).toString().getBytes()); out.write("\n"); sleep(100); } 接受: for (;;) { byte[] readBuffer = new byte[255]; in.readLine(readBuffer); //就是读一行 reData = new String(readBuffer); <do some process> }
to cfsego(陈传文) 我用的是j2se的缩小版本,in.readLine(readBuffer); 在in里面没有readLine()这个方法。
Read a line of text. A line is considered to be terminated by any one of a line feed ('\n'), a carriage return ('\r'), or a carriage return followed immediately by a linefeed.自己写一个撒.....给个例子,这里我们是\r后面一定跟\n的,你可以改一下.或者你可以参考下BufferedReader.readLine()源码.private String readLine(PushbackInputStream ins, String encoding) throws Exception { int i,j=0;
byte[] b = new byte[1]; byte[] b2 = new byte[512]; StringBuffer buffer = new StringBuffer("");
while (true) { i = ins.read(); b[0] = (byte) i; b2[j] = b[0]; j++; if (b[0] == '\r') { i = ins.read(); b[0] = (byte) i; b2[j] = b[0]; if (b[0] != '\n') { System.out.println("impossible error in multiformparser.readline, the \r is not followed by an \n"); return null; } break; } buffer.append(new String(b, encoding)); } String aa = new String(b2,0,j-1,encoding); return aa; }
发送:
for (int i = 0; i < data.size(); i++) {
out.write(data.elementAt(i).toString().getBytes());
out.flush();
sleep(100);
}
接受:
for (;;) {
byte[] readBuffer = new byte[255];
in.read(readBuffer);
reData = new String(readBuffer);
<do some process>
}
就是每一行刷一次
cfsego(陈传文)的方法不行。
那有什么方法可以实现呢?大家可以做做。
String rest = "";//用于暂存一条不全的记录
String aLine; //用于暂存一条完全的记录
String[] datas = reData.split('&');//按结束符将reData分割为字符串数组
for(i = 0; i < datas.length; i ++) {//循环这个数组
if (i == 0) { //如果是第一次循环
if (rest != null && !rest.equals("")) {//上次接收时留有一条不全的记录
aLine = rest + datas.[0];//和这次的部分拼接成完整的
... //其它处理
}
else { //否则
aLine = datas[0]; //直接取到一条完整的记录
... //其它处理
}
}
else if (i == datas.length - 1) {//如果是最后一次循环
rest = datas[i]; //当作不全的记录暂存起来
}
else { //其它循环
aLine = datas[i]; //都直接取完整的记录
... //其它处理
}
}注意此算法可能有些边界问题需要完善
out.write(data.elementAt(i).toString().getBytes());
out.write("\n");
sleep(100);
}
接受:
for (;;) {
byte[] readBuffer = new byte[255];
in.readLine(readBuffer); //就是读一行
reData = new String(readBuffer);
<do some process>
}
这个思路可行
我以前看到一个加行号的程序,大概是这么写的
我们的设计程序的思路应该是
怎么简单高效怎么写
对于String的操作可以用
DataInputStream和DataOutputStream来实现,
dis.readUTF();
dos.writeUTF(test[i]);
to wjsfr(令狐葱) 用dos.writeUTF(test[i]);只能发送一部分数据,如果达到1000多条的话就发不出去,不信你试试看。
to cfsego(陈传文) 我用的是j2se的缩小版本,in.readLine(readBuffer); 在in里面没有readLine()这个方法。
这就行呀!
for (int i = 0; i < data.size(); i++) {
out.write(data.elementAt(i).toString().getBytes());
out.write("\n");
sleep(100);
}
接受:
for (;;) {
byte[] readBuffer = new byte[255];
in.readLine(readBuffer); //就是读一行
reData = new String(readBuffer);
<do some process>
}
println发送
readLine接受
read = in.read(buffer)
如果我读进来的buffer没有达到1024b,那我程序一直在等到读到有1024b才结束,请问有没有什么方法可以解决这个问题?
int c=0;
while((c=in.read())!=0)呢?
他们可以实现non-blocking mode
Exception {
int i,j=0;
byte[] b = new byte[1];
byte[] b2 = new byte[512];
StringBuffer buffer = new StringBuffer("");
while (true) {
i = ins.read();
b[0] = (byte) i;
b2[j] = b[0];
j++;
if (b[0] == '\r') {
i = ins.read();
b[0] = (byte) i;
b2[j] = b[0];
if (b[0] != '\n') {
System.out.println("impossible error in multiformparser.readline, the \r is not followed by an \n");
return null;
}
break;
}
buffer.append(new String(b, encoding));
}
String aa = new String(b2,0,j-1,encoding);
return aa;
}