java核心技术 高级特性第八版 27页的问题为什么27页class DataIO 类里的readFixedString方法的if(ch==0)错误?
我的代码是//这样有错
class DataIO{
public static void writeFixedString(String name,int size,DataOutputStream out) 
throws IOException{
int i=0;
char ch;
while(i<size){
ch=0;
if(i<name.length()){
ch=name.charAt(i);
}
out.writeChar(ch);
i++;
}
}
public static String readFixedString(int size,RandomAccessFile in) 
throws IOException{
int i=0;
char ch;
StringBuilder str=new StringBuilder();
while(i<size){
ch=in.readChar();
if(ch==0)
break;
i++;
str.append(ch);
}
in.skipBytes(2*(size-i));
return str.toString();
}
}
/*改成这样问题是
  if(ch=='0')
      break;
  从文本中读取'0'字符赋予ch,可ch不会等于'0'了,ch=='0'永远为假,这是为什么?
*/
class DataIO{
public static void writeFixedString(String name,int size,DataOutputStream out) 
throws IOException{
int i=0;
char ch;
while(i<size){
ch=0;
if(i<name.length()){
ch=name.charAt(i);
}
out.writeChar(ch);
i++;
}
}
public static String readFixedString(int size,RandomAccessFile in) 
throws IOException{
int i=0;
char ch;
StringBuilder str=new StringBuilder();
while(i<size){
ch=in.readChar();
if(ch=='0')
break;
i++;
str.append(ch);
}
in.skipBytes(2*(size-i));
return str.toString();
}
}//换成这样也不对,到底是为什么,好纠结
class DataIO{
public static void writeFixedString(String name,int size,DataOutputStream out) 
throws IOException{
int i=0;
char ch;
while(i<size){
ch=' ';
if(i<name.length()){
ch=name.charAt(i);
}
out.writeChar(ch);
i++;
}
}
public static String readFixedString(int size,RandomAccessFile in) 
throws IOException{
int i=0;
char ch;
StringBuilder str=new StringBuilder();
while(i<size){
ch=in.readChar();
if(ch==' ')
break;
i++;
str.append(ch);
}
in.skipBytes(2*(size-i));
return str.toString();
}
}

解决方案 »

  1.   

    class DataIO{
        public static void writeFixedString(String name,int size,DataOutputStream out) 
                throws IOException{
            int i=0;
            char ch;
            while(i<size){
                ch=0;
                if(i<name.length()){
                    ch=name.charAt(i);
                }
                out.writeChar(ch);
                i++;
            }
        }
        public static String readFixedString(int size,RandomAccessFile in) 
                throws IOException{
            int i=0;
            char ch;
            StringBuilder str=new StringBuilder();
            while(i<size){
                ch=in.readChar();
                if(ch==0)
                    break;
                i++;
                str.append(ch);
            }
            in.skipBytes(2*(size-i));
            return str.toString();
        }
    }这个是没有问题的哦~~在Java中 char类型在处理的时候最终还是转为int处理的