你给我答案,我给你分数。

ltian 2001-06-26 07:23:43
程序如下:
//Server端
import java.io.*;
import java.net.*;
import java.util.*;

public class IOtestSvr {
public static void main(String[] args)
{
boolean on = true;
try
{ ServerSocket svrSocket = new ServerSocket(8000);
while (on) {
System.out.println("begin");
Socket socket = svrSocket.accept();
DataInputStream in = new DataInputStream(socket.getInputStream());
byte[] bTest = new byte[1024];
int i = in.read(bTest);
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
}


//Client
import java.io.*;
import java.net.*;
import java.util.*;
public class IOtestCli {
public static void main(String[] args)
{
System.out.println("Hello World!");
try {
Socket socket = new Socket("127.0.0.1",8000);]
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
out.writeChars("String 1" + '\n'+'\r');
out.writeChars("一个测试");
out.writeChar('a');
out.writeChars("Sting 2" + '\r');
out.flush();
out.close();

socket.close();
}
catch (Exception e) {
System.out.println("Err");
e.printStackTrace();
}
}
}


试问i=?
(我这的结果是i=1,哪位高人能解释下么?谢谢谢谢谢谢。)
...全文
178 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
ltian 2001-06-30
  • 打赏
  • 举报
回复
hehe,谢谢,
我给分了。
ender 2001-06-29
  • 打赏
  • 举报
回复
你的程序我早试过了……结果也是1……

经过研究,我发现只要用writeChars来写就会出错……

而换成write(byte[] b)就没问题……

很奇怪,我还在研究这个问题……

你看看http://www.csdn.net/expert/topic/175/175368.shtm
ltian 2001-06-29
  • 打赏
  • 举报
回复
读到字节FF?
你试试我的程序啊?看看是不是i=1?
我如果一个个字节的读,通过catch EOFException 得到的i就是正常的。
程序:
....
int i=0;
while(true) {
bTest[i] = in.readByte();
i++
}
....

catch(EOFException e) {
try {
System.out.println(i);
FileOutputStream out = new FileOutputStream("e:\\test");
outt.write(bTest);
}
catch (Ex.. e) {
}
}

test文件的头几个为00 53 00 74 00 72.
ender 2001-06-29
  • 打赏
  • 举报
回复
你用的DataInputStream也是处理UNICODE的……

判断EOF也是读到-1啊,这一点所有的流应该都是一样的……

ltian 2001-06-29
  • 打赏
  • 举报
回复
继续请教:DataInputStream是怎么判断一个Stream的EOF呢?(原理上)

ltian 2001-06-29
  • 打赏
  • 举报
回复
to ender
看了啊,但是我还没没搞明白。
to supersonics
我用的真是stream啊,怎么不行呢?
ender 2001-06-29
  • 打赏
  • 举报
回复
啊!
真的是JDK的BUG?
knight_qmh 2001-06-29
  • 打赏
  • 举报
回复
这是JDK的问题,更新到jdk1.3.1就好了
ender 2001-06-29
  • 打赏
  • 举报
回复
对,关键是为什么会出现这种情况呢?

照我想来,无论发送端用什么方式,接收端都可以当成字节流来读啊,为什么不行呢?

光知其然是不够的,我们要知其所以然……
ltian 2001-06-29
  • 打赏
  • 举报
回复
解决方法早就找到了。
但为什么会出现这种事呢?
mty 2001-06-29
  • 打赏
  • 举报
回复
Client:
你用writeChar和writeChars写的是char类型,
Server:
接收时用read方法用byte类型接收就会出这样的问题。
解决办法:
1).Client端改用write方法,Server端不变
2).Server端改用readLine方法或readChar方法
supersonics 2001-06-28
  • 打赏
  • 举报
回复
当初我用java写一个文件分割程序,用DataInputStream和DataOutputStream,结果对于text文件正确了,对于word文档无论如何也不对。这里有位高人给予了详细的指点:
http://www.csdn.net/expert/topic/85/85076.shtm
ender 2001-06-28
  • 打赏
  • 举报
回复
诶,老兄,你有没看我的回复啊?

把DataInputStream和DataOutputStream分别换成InputStream和OutputStream就解决了……

至于为什么会这样,我也还在研究……
ltian 2001-06-28
  • 打赏
  • 举报
回复
我如果在client中输入是字节数组,则能返回正确的i值,也就是数组的大小。
为什么输入字符串就不行呢,真不明白。
ltian 2001-06-28
  • 打赏
  • 举报
回复
in.read(byte[])返回的应该是所读入数组的大小啊,
没必要用(-1)来判断吧?
plato 2001-06-27
  • 打赏
  • 举报
回复
只要read不返回-1,就说明还有数据没有读,
你应该写一个循环:

while( (i=in.read(bTest))!= -1)
{
.....
}
ender 2001-06-27
  • 打赏
  • 举报
回复
你为什么一定要用DIS和DIO呢?
Data input streams and data output streams represent Unicode strings in a format that is a slight modification of UTF-8.
直接用InputStream和OutputStream不更好?
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();
...
ltian 2001-06-26
  • 打赏
  • 举报
回复
我用重新做了一边,
System.out.println(i)的结果就是1。
我真faint.
ltian 2001-06-26
  • 打赏
  • 举报
回复
faint,我这怎么就是1?
llkh 2001-06-26
  • 打赏
  • 举报
回复
我的结果是46,程序应该没问题
加载更多回复(3)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧