因为写入txt格式的话,只能写入字符形式的数据,如果写入int类型的数据,会根据acci码表转化为对应的字符。但是如果写的超出0~127以外的数据的话,将写入最低字节,其他三个字节将抛弃,这也是int强制转化byte类型的结果。
/** * 基本方法,每次在文件中写入一个字节 * 如果是多字节发送,write(byte[] b)没有write(byte[] b,int offset,int length)快 * 因为在实际的网络传输中每个tcp分片至少包含40个字节的开销用于路由和纠错 * @param out * @throws IOException */ private static void generateCharacters(FileOutputStream out) throws IOException { int firstPrintableCharacters=33; int numberPrintableCharacters=94; int numberOfCharactersPerLine=72; int start=firstPrintableCharacters; while(true){ for(int i=start;i<start+numberOfCharactersPerLine;i++){ out.write((i-firstPrintableCharacters) %numberPrintableCharacters+firstPrintableCharacters); } out.write(' '); out.write(' '); start=((start+1)-firstPrintableCharacters)%numberPrintableCharacters+firstPrintableCharacters; } } /** * 在tcp协议中如果进行单字节发送的话,效率不高,因为每次发送一字节会就会进行一遍数据传输,导致协议的开销很大, * 如果将多字节整合到一个字节数组中进行发送,只需要一次就能发送全部字节,所以效率要高。 * @param out * @throws IOException */ private static void generateCharactersGood(FileOutputStream out) throws IOException{ int firstPrintableCharacters=33; int numberPrintableCharacters=94; int numberOfCharactersPerLine=72; int start=firstPrintableCharacters; byte[] line=new byte[numberOfCharactersPerLine+2]; while(true){ for(int i=start;i<start+numberOfCharactersPerLine;i++){ line[i-start]=(byte) ((i-firstPrintableCharacters) %numberPrintableCharacters+firstPrintableCharacters); } line[72]=(byte)' '; line[73]=(byte)' '; out.write(line); start=((start+1)-firstPrintableCharacters)%numberPrintableCharacters+firstPrintableCharacters; } }