当前位置:编程学习 > JAVA >>

Java 网络编程中读取数据问题

已知数据长度为20字节,下面两种方法那一个比较可靠?
方法一:

private byte[] readData(InputStream is) throws IOException{
try{
byte[] buff = new byte[20];
is.read(buff, 0, 20);
return buff;
}catch(Exception e){

}
throw new IOException();

}


方法二:

private static byte[] readData(InputStream is) throws IOException{
byte[] buff = new byte[20];
int totalSize = 0;
int readSize = 0;
while ((readSize = is.read(buff, totalSize, 20 - totalSize)) != -1) {
totalSize = totalSize + readSize;
if (totalSize == 20) {
return buff;
}
}
throw new IOException();

}
--------------------编程问答-------------------- 第一种更有效。是一次性就读取完了,第二种还有比较、判断、循环、相加等其它操作。
另外,你的异常为什么要这样抛? --------------------编程问答--------------------
引用 1 楼  的回复:
第一种更有效。是一次性就读取完了,第二种还有比较、判断、循环、相加等其它操作。
另外,你的异常为什么要这样抛?


我对流操作不是特别了解,我知道is.read(buff, 0, 20);如果buff没有写满20个字节,是不是还可从流里继续读。所以我想出了第二种方法。 --------------------编程问答--------------------
引用楼主  的回复:
            is.read(buff, 0, 20);

这个方法,使最多读20字节,不是刚好读20字节,实际上,可能读出来的字节数使0到20的任意数目.
所以,需哟判断到底读出了多少个字节,然后不停的循环.

方法2效率较差 --------------------编程问答--------------------
引用 3 楼  的回复:
方法2效率较差


方法2时正解,我没有仔细看,我以为方法2时一个字节一个字节的读 --------------------编程问答-------------------- 谢谢~ --------------------编程问答-------------------- 第一个方法好,软件工程的概念,高内聚低耦合,模块之间数据传递越少越好;
以此类推,程序与网络与数据库数据传递次数尽量减少; --------------------编程问答-------------------- 试试这个,最多只需要一次。
private byte[] readData(InputStream is) throws IOException{
int maxLen = 20;
byte[] result = new byte[maxLen];
        byte[] buff = new byte[maxLen];
        try{
        int len = is.read(buff, 0, maxLen);
        if(len == maxLen){
         return buff;
        }
        //已经读取的长度
        int readLen = 0;
        while(len>-1){
         if(readLen+len>maxLen){
         len = maxLen-readLen;
         }
         System.arraycopy(buff, 0, result, readLen, len);
         readLen+=len;
         if(readLen>=maxLen){
         break;
         }else{
         len = is.read(buff, 0, maxLen);
         }
        }            
        }finally{
         buff = null;
        }
        return buff;
    } --------------------编程问答-------------------- 方法二好。 --------------------编程问答--------------------
引用 6 楼  的回复:
第一个方法好,软件工程的概念,高内聚低耦合,模块之间数据传递越少越好;
以此类推,程序与网络与数据库数据传递次数尽量减少;


第一个方法不能满足需求,有可能读不到20字节,所以不能用 --------------------编程问答-------------------- 方法二比较可靠
补充:Java ,  Java SE
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,