getChannel()问题

zhongguo99 2004-07-31 11:14:06
我想用两个getChannel()分别处理两个文件
FileChannel fc = RAFile.getChannel();
FileChannel fc1 = RATxt.getChannel();
可是当我用fc.size()取来的值却和fc1.size()的值相等,为什么啊?有什么办法处理这个问题呢?我要将这两个文件一起处理
...全文
1032 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhongguo99 2004-08-03
  • 打赏
  • 举报
回复
怎么给不了分啊?说我回贴跟大于给分次数,若是这个给不了分,向大家说对不起了
zhongguo99 2004-08-03
  • 打赏
  • 举报
回复
我将文本的改成只读的,就解决问题了 :)
registered 2004-08-03
  • 打赏
  • 举报
回复
RAFile = new RandomAccessFile("d:\\1.bmp", "rw");//读入图片
RATxt = new RandomAccessFile("d:\\1.txt", "rw");//读入文本
你把文件名改的复杂点试试
比如: bmp.bmp; txt.txt
按说文件不同 size 不会相同
wpz0k 2004-08-02
  • 打赏
  • 举报
回复
继续关注此问题,顶一下。
zhongguo99 2004-08-02
  • 打赏
  • 举报
回复
谢谢 nhk_csdn(我呢)
我已经改成mbb1 = fc1.map(FileChannel.MapMode.READ_WRITE, 0, fcl.size());了
这个错误应当只影响到mbb1,而fcl.size(),和fc.size()的大小还是一样,还是找不到错误在哪里
nhk_csdn 2004-08-02
  • 打赏
  • 举报
回复
没仔细看你的逻辑

try {
mbb = fc.map(FileChannel.MapMode.READ_WRITE, 0, fc.size());
mbb1 = fc1.map(FileChannel.MapMode.READ_WRITE, 0, fc.size());
}
应该是:
mbb1 = fc1.map(FileChannel.MapMode.READ_WRITE, 0, fcl.size());
zhongguo99 2004-08-02
  • 打赏
  • 举报
回复
自己顶一次
zhongguo99 2004-08-01
  • 打赏
  • 举报
回复
package registeredmethod;

import javax.swing.UIManager;
import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;
import java.nio.MappedByteBuffer;
import java.io.*;


/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/

public class Get {
boolean packFrame = false;

//Main method
public static void main(String[] args) {
RandomAccessFile RAFile = null;
RandomAccessFile RATxt = null;
try {
RAFile = new RandomAccessFile("d:\\1.bmp", "rw");//读入图片
RATxt = new RandomAccessFile("d:\\1.txt", "rw");//读入文本
}
catch (FileNotFoundException ex) {
}
FileChannel fc = RAFile.getChannel();//创建图象操作通道
FileChannel fc1 = RATxt.getChannel();//创建文本操作通道
MappedByteBuffer mbb = null;
MappedByteBuffer mbb1 = null;
try {
mbb = fc.map(FileChannel.MapMode.READ_WRITE, 0, fc.size());
mbb1 = fc1.map(FileChannel.MapMode.READ_WRITE, 0, fc.size());
}
catch (IOException ex1) {
ex1.printStackTrace();
}
int textsize = 0;
try {
textsize= (int) fc1.size();//得到文本大小
}
catch (IOException ex3) {
ex3.printStackTrace();
}
try {
if (fc.size() > (fc1.size() * 8 - 55)) {//比较图片和文本的大小
for (int nom = 0; nom < textsize; nom++) {//符合情况则循环
byte src1 = mbb1.get(textsize);//得到文本第textsize个字节
byte[] bittxt = new byte[8];
for (int i = 0; i < 8; i++) {
if ( (src1 & (1 << i)) > 0) {
bittxt[i] = 1;
}
else {
bittxt[i] = 0;
}
}//得到位
for (int j = 0; j < 8; j++) {
int n = 55;
byte src = mbb.get(n);//取得图象的第n个字节
//取得位
byte[] bits = new byte[8];
for (int i = 0; i < 8; i++) {
if ( (src & (1 << i)) > 0) {
bits[i] = 1;
}
else {
bits[i] = 0;
}
byte bit0 = (byte) (bits[7] ^ bits[6] ^ bits[5]
^ bits[4] ^ bits[3] ^ bits[2] ^ bits[1] ^
bittxt[j]);//异或操作
src &= (byte) 0xFE;
src = (byte) (src | bit0);
mbb.put(n, src);//将操作后的数值插回到第n个字节的第0位中
n++;
System.out.println(bittxt[j]);
}
}
}
try {
fc.close();
}
catch (IOException ex2) {
ex2.printStackTrace();
}
}
}
catch (Exception ex4) {
ex4.printStackTrace();
}
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (Exception e) {
e.printStackTrace();
}
new Get();
}
}
allen830826 2004-07-31
  • 打赏
  • 举报
回复
对啊
文件大小不一样
返回的之怎么会一样呢
zhongguo99 2004-07-31
  • 打赏
  • 举报
回复
不相等,1个1M一个才20K
allen830826 2004-07-31
  • 打赏
  • 举报
回复
你这两个文件大小相等吗?
registered 2004-07-31
  • 打赏
  • 举报
回复
建议检查一下程序中的其他错误吧
两个不同大小的文件 size 不可能相同

62,623

社区成员

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

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