J2ME中持久存储的问题

oostart 2005-08-01 03:37:36
import ……
public class RecordStoreTest extends MIDlet
{
public RecordStoreTest(){}
public void startApp() throws MIDletStateChangeExcepetion
{
RecordStore rs = null;
try{
rs = RecordStore.openRecordStore("file1",true);
//如果file1已存在,打开;否则创建file1
byte [] data = new byte[4];
for(int j = 0;j < 2;j++) //每次写入两个记录
{
int i = rs.getNextRecordeID(); //获得下一个记录号
data[0] = (byte)((i >> 24) & 0xff); //??
data[1] = (byte)((i >> 16) & 0xff); //??
data[2] = (byte)((i >> 8) & 0xff); //??
data[3] = (byte)(i & 0xff); //??
System.out.println("record "+rs.addRecord(data,0,4)+" is added.");
}
……
请问,“??”问号的四个语句该如何注释,或者说这它们整体的功能是什么?谢谢!
...全文
119 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
homesos 2005-08-01
  • 打赏
  • 举报
回复
//将int型数据进行分解,以将其转换为byte且不会丢失数据(int的位数要比byte的位数多,如果要将其进行转换存储,需要分解)
data[0] = (byte)((i >> 24) & 0xff); //将特定位保留下来,正常顺序(从右到左)下的后八位的二进制,以方便转换成byte
data[1] = (byte)((i >> 16) & 0xff); //将特定位保留下来,正常顺序(从右到左)下的16-24间的二进制,以方便转换成byte
data[2] = (byte)((i >> 8) & 0xff); //将特定位保留下来,正常顺序(从右到左)下的8-16间的二进制,以方便转换成byte
data[3] = (byte)(i & 0xff); //将特定位保留下来,正常顺序(从右到左)下的前八位的二进制,以方便转换成byte
xueyong1203 2005-08-01
  • 打赏
  • 举报
回复
i 为一int型变量,占4个字节
所以 data[0] = (byte)((i >> 24) & 0xff); //右移24位(3个字节),然后与0xff进行AND操作,得到这个int型变量中最高位那个字节的值
data[1] = (byte)((i >> 16) & 0xff); //同上,右移16位2个字节,得到第二个字节的值
data[2] = (byte)((i >> 8) & 0xff); //得到第三个字节的值
data[3] = (byte)(i & 0xff); //得到最低位那个字节的值

举例,i = 0x12345678, 则data[0] = 0x12, data[1] = 0x34, data[2] = 0x56, data[3] = 0x78

13,097

社区成员

发帖
与我相关
我的任务
社区描述
Java J2ME
社区管理员
  • J2ME社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧