我尝试将字节数组转换为public class FixSongs extends SwingWorker<String, Object>
{
@Override
public String doInBackground() throws Exception
{
try
{
new FixSongsController().start();
if (!isCancelled())
{
new FixSongsReportCreator().createReport();
}
return "";
}
catch (Throwable ex)
{
MainWindow.logger.log(Level.SEVERE, ex.getMessage(), ex);
throw ex;
}
}
@Override
protected void done()
{
SongKong.mainWindow.dialog.close();
if (!isCancelled())
{
ShowCounters showCounters = new ShowReport();
}
}
}
并使用public class FixSongsDialog extends RecordBasedProgressDialog
{
....
@Override
public void cancelTask()
{
try
{
swingWorker.cancel(true);
CreateReport createReport = new CreateReport();
createReport.execute();
this.dispose();
}
catch(Exception ex)
{
MainWindow.logger.log(Level.SEVERE,ex.getMessage(),ex);
throw ex;
}
}
class CreateReport extends SwingWorker<String, Object>
{
@Override
public String doInBackground() throws Exception
{
try
{
new FixSongsReportCreator().createReport();
return "";
}
catch(Exception ex)
{
MainWindow.logger.log(Level.SEVERE,ex.getMessage(),ex);
throw ex;
}
}
@Override
protected void done()
{
ShowCounters showCounters = new ShowReport();
}
}
}
将其写入文件(仅用mc检查它的值,我需要内容在字符串中)
我的问题归纳起来了:
String
输出.txt的内容为十六进制,带有mc:
00 00 01 EF | BF BD 0A
尽管它应该是:00 00 01 B3
是什么原因引起的?我猜它是编码,但我不知道我应该使用什么类型的编码(我尝试了一些Cp ###类型,但到目前为止它们都没有工作)。
更新
每个转换为字符串的负字节都会产生:EF BF BD
因此,仅当无符号字节值小于128时才有效。
所以问题是如何在字符串中表示大于127的字节,就像我用0-127字节那样?
答案 0 :(得分:2)
这样就可以了。它将按预期输出00 00 01 b3
。
FileOutputStream fos = new FileOutputStream("filename");
fos.write(b);
fos.close();