黑马程序员技术交流社区

标题: 姓名固定字节长度 [打印本页]

作者: 戴进飘    时间: 2012-12-10 17:19
标题: 姓名固定字节长度
  1. public static void writeMethod(){
  2.                 RandomAccessFile raf = null;
  3.                 try {
  4.                         raf = new RandomAccessFile("PandomAccessFile.txt", "rw");
  5.                         raf.write("关羽".getBytes());                        //  这里怎么样才能给姓名固定为16字节为
  6.                         raf.writeInt(97);
  7.                 } catch (IOException e) {
  8.                 } finally {
  9.                         if (raf != null) {
  10.                                 try {
  11.                                         raf.close();
  12.                                 } catch (IOException e2) {
  13.                                 }
  14.                         }
  15.                 }
  16.         }
复制代码
在毕老师教程中的21天的第3遍教程。的一个问题。
如果给姓名固定字节长度
raf.write("关羽".getBytes());                        // 这里怎么样才能给姓名固定为16字节为



作者: 戴进飘    时间: 2012-12-10 23:34
没有人懂吗?求答案
作者: xjandrew    时间: 2012-12-10 23:40
                             raf = new RandomAccessFile("PandomAccessFile.txt", "rw");
                             byte[] buf = new byte[8];
                             buf = "关羽".getBytes();          //这里可以加两句
05.                        raf.write(buf);                        //  这里怎么样才能给姓名固定为16字节为

06.                        raf.writeInt(97);


作者: 戴进飘    时间: 2012-12-11 13:04
xjandrew 发表于 2012-12-10 23:40
raf = new RandomAccessFile("PandomAccessFile.txt", "rw");
              ...

这样定义不行。
buf = "关羽".getBytes(); 这一句不是把数组给改掉了吗!长度会变成4个字节的
作者: xjandrew    时间: 2012-12-11 13:09
本帖最后由 xjandrew 于 2012-12-11 13:14 编辑

一个中文汉字占两个字节的空间。
那除了“关羽”占4个字节外,数组剩下的字节是被什么占着?
若是我把数组长度定错了,你可以自行改成正确的

作者: 戴进飘    时间: 2012-12-11 13:20
xjandrew 发表于 2012-12-11 13:09
一个中文汉字占两个字节的空间。
那除了“关羽”占4个字节外,数组剩下的字节是被什么占着?
若是我把数组 ...

因为 "关羽".getBytes()这个数组的字节是4位,
buf = "关羽".getBytes()。你再加这句时,buf的引用就指向 ("关羽".getBytes())这个数组了
作者: xjandrew    时间: 2012-12-11 16:06
经研究,这样可行
  1. byte[] buf = new byte[8];
  2.                 byte[] buf2 = "关羽".getBytes();
  3.                
  4.                 for(int i=0,j=0; i<buf2.length; i++)
  5.                 {
  6.                         while(j<=i)
  7.                         {
  8.                                 buf[i] = buf2[j];
  9.                                 j++;
  10.                         }
  11.                 }
  12.                 for(byte b : buf)
  13.                 {
  14.                         System.out.println(b);
  15.                 }
复制代码

作者: 戴进飘    时间: 2012-12-11 20:53
xjandrew 发表于 2012-12-11 16:06
经研究,这样可行

:lol嘻嘻,这样可以呀!for循环内面,while遍历可以不要。
谢谢啦!兄弟




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2