先向文件中写入5个0xFF,再读取刚写的数据,将读取到的再次写到文件,文件却变成了3个0x3F, 数值变

,接上:个数也减半。请教这是为什么?有个任务就是要不断在文件中将特定字节的0变成0xFF以作为该条记录是删除还是正常的标记。请问该如何解决这个问题?谢谢。packaget... ,接上:个数也减半。请教这是为什么?
有个任务就是要不断在文件中将特定字节的0变成0xFF以作为该条记录是删除还是正常的标记。请问该如何解决这个问题?谢谢。

package testf;
import java.io.*;
public class DataStreamTest {
public static void main(String[] args) {
File file1 = new File("e:/testff.txt");
File file2 = new File("e:/testff.txt");
FileInputStream fis = null;
FileOutputStream fos = null;
DataInputStream dis = null;
DataOutputStream dos = null;
try {
fis = new FileInputStream(file1);
dis = new DataInputStream(fis);
int n = 0;
byte[] buff = new byte[1024];
String data = "";
int i = 0;
while((n=dis.read(buff))!=-1){
data += new String(buff,0,n);
}
fos = new FileOutputStream(file2);
dos = new DataOutputStream(fos);
dos.write(data.getBytes());
// dos.write(-1);
// dos.write(-1);
// dos.write(-1);
// dos.write(-1);
// dos.write(-1);
// dos.write(-1);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if(dis!=null)dis.close();
if(fis!=null)fis.close();
if(dis!=null)dis.close();
if(dos!=null)dos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
data += new String(buff,0,n,"US-ASCII");

后来发现,将编码方式改成"US-ASCII",结果是:之前是6个FF的,现在是6个3F。
展开
 我来答
luosiyong
2012-03-25 · TA获得超过3256个赞
知道大有可为答主
回答量:1090
采纳率:0%
帮助的人:1630万
展开全部
File file1 = new File("e:/testff.txt");
File file2 = new File("e:/testff.txt");
这里是对同一个文件两个引用打开同时进行读写吗?如果是这样的话,是有问题的
更多追问追答
追问
应该不是这个原因,如果file2指向一个新文件“E:/testff1.txt”,把从testff.txt中读到的数据写入新文件时,结果只显示一个3F。
谢谢。
追答
有个任务就是要不断在文件中将特定字节的0变成0xFF以作为该条记录是删除还是正常的标记

你这个应该是用的二进制文件吧,注意区分一下二进制文件和文本文件
如果还是不行,你把你那个生成源数据文件的程序贴出来看看

我看见你写入的时候好像是直接用的write(-1)这里-1不会是一个字节的吧
百度网友845f74e61
2012-03-26 · TA获得超过6929个赞
知道大有可为答主
回答量:4050
采纳率:50%
帮助的人:1633万
展开全部
可否给出原 :/testff.txt 的原始数据。
我用 0xFF0xFF0xFF0xFF0xFF 测试
生成的还是 0xFF0xFF0xFF0xFF0xFF

data += new String(buff,0,n,"US-ASCII");

也试过,结果一样的,没出现减半现象。
更多追问追答
追问
:/testff.txt 就是一个新建的文件,写入5个0xFF.
...
// dos.write(data.getBytes());
dos.write(-1);
dos.write(-1);
dos.write(-1);
dos.write(-1);
dos.write(-1);
dos.write(-1);
...
先这样写了六个,文件当中是

再换成这样,
...
dos.write(data.getBytes());
// dos.write(-1);
// dos.write(-1);
// dos.write(-1);
// dos.write(-1);
// dos.write(-1);
// dos.write(-1);
...
追答
你的方法挺怪的。

dos.write(-1);
dos.write(-1);
dos.write(-1);
dos.write(-1);
dos.write(-1);
dos.write(-1);

这样做完了以后,
还能保证文件中的内容与原来一样吗?

你用这个方法生成的文件,又 dos.write(data.getBytes());

为什么还希望文件的内容与最初的相同呢?

你的目的是什么?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
幸巴达
2012-03-29 · TA获得超过1.2万个赞
知道大有可为答主
回答量:6953
采纳率:38%
帮助的人:2476万
展开全部
文件的打开方式不应该是文本的,而应该是二进制的。
追问
谢谢。能指明下该用哪个方法吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式