A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 戴进飘 中级黑马   /  2012-12-10 17:19  /  1834 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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字节为


评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

7 个回复

倒序浏览
没有人懂吗?求答案
回复 使用道具 举报
                             raf = new RandomAccessFile("PandomAccessFile.txt", "rw");
                             byte[] buf = new byte[8];
                             buf = "关羽".getBytes();          //这里可以加两句
05.                        raf.write(buf);                        //  这里怎么样才能给姓名固定为16字节为

06.                        raf.writeInt(97);

回复 使用道具 举报
xjandrew 发表于 2012-12-10 23:40
raf = new RandomAccessFile("PandomAccessFile.txt", "rw");
              ...

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

一个中文汉字占两个字节的空间。
那除了“关羽”占4个字节外,数组剩下的字节是被什么占着?
若是我把数组长度定错了,你可以自行改成正确的
回复 使用道具 举报
xjandrew 发表于 2012-12-11 13:09
一个中文汉字占两个字节的空间。
那除了“关羽”占4个字节外,数组剩下的字节是被什么占着?
若是我把数组 ...

因为 "关羽".getBytes()这个数组的字节是4位,
buf = "关羽".getBytes()。你再加这句时,buf的引用就指向 ("关羽".getBytes())这个数组了
回复 使用道具 举报
经研究,这样可行
  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.                 }
复制代码
回复 使用道具 举报
xjandrew 发表于 2012-12-11 16:06
经研究,这样可行

:lol嘻嘻,这样可以呀!for循环内面,while遍历可以不要。
谢谢啦!兄弟
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马