java核心技术 高级特性第八版 27页的问题
为什么27页class DataIO 类里的readFixedString方法的if(ch==0)错误?
我的代码是
- Java code
//这样有错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(); }}
------解决方案--------------------
- Java code
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(); }}
------解决方案--------------------
改成0的Assic 码,试试