我真的很困惑,为什么当我使用下面显示的代码时,我得到一个0kb文件。作为Java网站关于这个类的说明,我应该工作。但是...我想要生成一个正弦波并输出其结果到一个txt填充双。这是我的代码的第一步,我陷入了这样一个简单的问题。也许我不太了解如何使用类文件和数据流,就像我从官方网站上学到的那样。为什么我在使用datainputstream,java,android时会得到一个0kb文件?
public class audioplayThread implements Runnable {
private File file;
private FileOutputStream ops;
private BufferedOutputStream bos;
private DataOutputStream dos;
private double Omega;
private int f = 18*1000;
private double pi;
private int samplenumber = 84; //Assume OFDM symbol has 64 real value and
private static final int Encording = AudioFormat.ENCODING_PCM_16BIT; //Data size for each frame = 16 bytes
private static final int Sample_rate = 48000; //Sample rate = 48000 HZ
private static final int Channel = AudioFormat.CHANNEL_OUT_MONO; //Set as single track
private static final int Buffersize = AudioTrack.getMinBufferSize(Sample_rate, Channel,Encording);
@Override
public void run() {
// TODO Auto-generated method stub
file = new File(Environment.getExternalStorageDirectory().getAbsoluteFile(),"mmm.txt");
if(file.exists()){
file.delete();
}
try {
file.createNewFile();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
/*Create a datastream*/
ops = new FileOutputStream(file);
bos = new BufferedOutputStream(ops);
dos = new DataOutputStream(bos);
/*Set sine wave parameter*/
pi = Math.PI;
Omega = 2*pi*f/Sample_rate;
/*Build instance for audiotrack*/
//AudioTrack at = new AudioTrack(AudioManager.STREAM_MUSIC,Sample_rate, Channel, Encording, Buffersize, AudioTrack.MODE_STREAM);
/*build sine wave*/
double[] buffer = new double[samplenumber];
for(int i=0;i<samplenumber;i++){
buffer[i] = Math.sin(Omega*i);
dos.writeDouble(buffer[i]);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
您是否试过关闭流?你正在缓冲,从不关闭它们,数据可能会丢失v –
呃......我很愚蠢,我怎么能忘记关闭它。谢谢!还有一个问题,为什么我在txt文件中获取这些数据是不可读的代码? – MarvinC
因为您使用的是使用二进制格式的'DataOutputStream'。 –