求救:怎么将已读入的流文件以字节形式取出

zhongguo99 2004-07-26 11:09:09
我用FileInputStream 读入一个bmp文件,现在想将其以字节形式存在。并且取其中的第70个字节里的第5位,和第7位,并且将它们进行异或超作。将取得的异或值存入第0位,然后将数据重新以BMP方式保存,本问题不需要解决怎么显示BMP文件。怎么实现?请大家帮帮我这个小菜,先谢谢了
...全文
275 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhongguo99 2004-07-29
  • 打赏
  • 举报
回复
将size改为length后出现
"Application1.java": cannot resolve symbol: method map (java.nio.channels.FileChannel.MapMode,int,long)in class java.io.RandomAccessFile at line 34, column 31
zhongguo99 2004-07-29
  • 打赏
  • 举报
回复
"Application1.java": incompatible types;found : java.nio.channels.FileChannel,required: java.io.RandomAccessFile at line 30, column 56
"Application1.java": cannot resolve symbol: method size ()in class java.io.RandomAccessFile at line 34, column 73
zhongguo99 2004-07-29
  • 打赏
  • 举报
回复
1.4.1
registered 2004-07-27
  • 打赏
  • 举报
回复
出错请把相关错误信息贴上来
zhongguo99 2004-07-27
  • 打赏
  • 举报
回复
fc = new RandomAccessFile("some.bmp", "rw").getChannel();
MappedByteBuffer mbb = fc.map(FileChannel.MapMode.READ_WRITE, 0, fc.size());
-----------------------------------------
为何fc.size 出错?
registered 2004-07-27
  • 打赏
  • 举报
回复
FileChannel 不是 length 而是 size
ChDw 2004-07-27
  • 打赏
  • 举报
回复
应该是length()
registered 2004-07-27
  • 打赏
  • 举报
回复
你用的什么版本的 sdk ?
zhongguo99 2004-07-27
  • 打赏
  • 举报
回复
"GetBit.java": cannot resolve symbol: variable size in class java.io.RandomAccessFile at line 28, column 63
--------------------------------------------------
size出现问题
minghuitian 2004-07-26
  • 打赏
  • 举报
回复
这个应该不难!查看一下FileInputStream类提供的方法。
zhongguo99 2004-07-26
  • 打赏
  • 举报
回复
小弟感激涕淋
http://community.csdn.net/Expert/topic/3178/3178198.xml?temp=.5635645
其实我做的是这个,但是没有人回答我,所以我将问题分解开来问
谢谢大家!
registered 2004-07-26
  • 打赏
  • 举报
回复
使用 New IO
一般用法为:

fc = new RandomAccessFile("some.bmp", "rw").getChannel();
MappedByteBuffer mbb = fc.map(FileChannel.MapMode.READ_WRITE, 0, fc.size());

while (mbb.hasRemaining()) {
byte data = mbb.get();
}

解决你这个问题:

fc = new RandomAccessFile("some.bmp", "rw").getChannel();
MappedByteBuffer mbb = fc.map(FileChannel.MapMode.READ_WRITE, 0, fc.size());

byte d70, b5, b7, result;
d70 = mbb.get(70);
b5 = (byte) (d70 & 0x10);
b7 = (byte) (d70 & 0x40);
result = (byte) (b5 ^ b7);
mbb.put(0, result);
fc.close();

逻辑步骤如上所示
正确性不敢保证: 因为中间有类型转换
用 java 跟 int 以下的原始类型打交道是极其痛苦的事情
由于 java 没有 unsigned 类型, 所以 cast 过程中经常出问题!
hq1305018 2004-07-26
  • 打赏
  • 举报
回复
java.io.RandomAccessFile raf=new java.io.RandomAccessFile(fileName,"rwd");
raf.skipBytes(69);
byte[] tByte=new byte[1];
raf.read(tByte);
//对bByte[0]进行操作。
raf.write(tByte);
lovelymaomao 2004-07-26
  • 打赏
  • 举报
回复
用read方法读出来的就是个字节嘛

62,623

社区成员

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

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