Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用java保存收到的数据_Java_Android_Printwriter_Objectid_Printstream - Fatal编程技术网

用java保存收到的数据

用java保存收到的数据,java,android,printwriter,objectid,printstream,Java,Android,Printwriter,Objectid,Printstream,我有一个发送bmp文件的服务器和一个Android客户端,在那里我试图保存我收到的数据。 我使用以下代码将数据保存在文件中: ... byte[] Rbuffer = new byte[2000]; dis.read(Rbuffer); try { writeSDCard.writeToSDFile(Rbuffer); } catch (Exception e) { Log.e("TCP", "S: Error at file write", e); } fi

我有一个发送bmp文件的服务器和一个Android客户端,在那里我试图保存我收到的数据。 我使用以下代码将数据保存在文件中:

...
byte[] Rbuffer = new byte[2000];
dis.read(Rbuffer);

try {
    writeSDCard.writeToSDFile(Rbuffer);
    } catch (Exception e) {
    Log.e("TCP", "S: Error at file write", e);

    } finally {
    Log.e("Writer", "S: Is it written?");
    }
...

 void writeToSDFile(byte[] inputMsg){

    // Find the root of the external storage.
    // See http://developer.android.com/guide/topics/data/data-  storage.html#filesExternal

    File root = android.os.Environment.getExternalStorageDirectory();

    File dir = new File (root.getAbsolutePath() + "/download");
    if (!(dir.exists())) {
         dir.mkdirs();
     }
    Log.d("WriteSDCard", "Start writing");

    File file = new File(dir, "myData.txt");

    try {
   // Start writing in the file without overwriting previous data ( true input)
        Log.d("WriteSDCard", "Start writing 1");
        FileOutputStream f = new FileOutputStream(file, true);
        PrintWriter ps = new PrintWriter(f);
//      PrintStream ps = new PrintStream(f);
        ps.print(inputMsg);
        ps.flush();
        ps.close();
        Log.d("WriteSDCard", "Start writing 2");
        f.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
        Log.i(TAG, "******* File not found. Did you" +
                " add a WRITE_EXTERNAL_STORAGE permission to the   manifest?");
    } catch (IOException e) {
        e.printStackTrace();
    }
}
但在输出中,我接收对象ID

e、 g。 [B@23fgfgre[B@eft908eh

(其中,[表示数组。B表示字节。@将类型与ID分开。十六进制数字是对象ID或哈希代码。)

即使使用“PrintStream”而不是“PrintWriter”,我也会收到相同的结果

如何保存实际输出?

尝试:

FileOutputStream f = new FileOutputStream(file, true);
f.write(inputMsg);
f.close();
尝试:

PrintWriter
PrintStream
名称中的“print”一词应该会提示您它们生成文本。如果您仔细阅读文档,其中会明确说明这一点

具体地说,您正在使用的
PrintWriter
print(objectobj)
重载的文档明确说明

打印一个对象。string.valueOf(object)方法生成的字符串根据平台的默认字符编码转换为字节,这些字节完全按照write(int)方法的方式写入

显然,这不是您想要的。您有一个字节数组,并且希望将这些字节完全按原样写入文件。因此,请忘记
PrintWriter
PrintStream
。相反,请执行以下操作:

BufferedOutputStream bos = new BufferedOutputStream(f);
bos.write(inputMsg);
//bos.flush(); stop. always. flushing. close. does. that.
bos.close();
PrintWriter
PrintStream
名称中的“print”一词应该会提示您它们生成文本。如果您仔细阅读文档,其中会明确说明这一点

具体地说,您正在使用的
PrintWriter
print(objectobj)
重载的文档明确说明

打印一个对象。string.valueOf(object)方法生成的字符串根据平台的默认字符编码转换为字节,这些字节完全按照write(int)方法的方式写入

显然,这不是您想要的。您有一个字节数组,并且希望将这些字节完全按原样写入文件。因此,请忘记
PrintWriter
PrintStream
。相反,请执行以下操作:

BufferedOutputStream bos = new BufferedOutputStream(f);
bos.write(inputMsg);
//bos.flush(); stop. always. flushing. close. does. that.
bos.close();

您是否尝试过使用
FileOutputStream
创建
bufferedoutstream
并使用
write(byte[])
方法?
Rbuffer=new byte[2000];
。bmp文件是否小于2000字节?
dir.mkdirs();
。检查返回值。返回值可能为false。如果返回值为false,则不要继续使用代码,而是显示一个toast和return。您应该回答我的问题,而不是提供一个不可单击的url。@greenapps我不知道收到的文件有多大。但是代码甚至在写入(字节[])时也有问题方法,因为它会创建太大的文件…您是否尝试过使用
FileOutputStream
创建
bufferedoutstream
并使用
write(byte[])
方法?
Rbuffer=new byte[2000];
。bmp文件是否小于2000字节?
dir.mkdirs();
。检查返回值。返回值可能为false。如果返回值为false,则不要继续使用代码,而是显示一个toast和return。您应该回答我的问题,而不是提供一个不可单击的url。@greenapps我不知道收到的文件有多大。但是代码甚至在写入(字节[])时也有问题方法,因为它创建了太大的文件…我使用了它,但文件在几秒钟内变得太大…根据java manual write():将指定字节数组中的b.length字节写入此文件输出流。这是一个完全不同的问题。我们不知道您如何使用此代码、从何处获取数据、数据以何种速率传入等。发布一个新问题,并附上一个示例和输入数据,然后查看您是否得到该问题的答案。我不知道
dis.read(Rbuffer);
是什么,或者它是做什么的,但我可以肯定的是,没有给出您正在读取多少字节的指示。因此,您的代码当然也有其他问题。我使用了它,但文件在几秒钟内变得太大……根据java manual write():将指定字节数组中的b.length字节写入此文件输出流。这是一个完全不同的问题。我们不知道您如何使用此代码、从何处获取数据、数据以何种速率传入等。发布一个新问题,并附上一个示例和输入数据,然后查看您是否得到该问题的答案。我不知道
dis.read(Rbuffer);
是什么,或者它是做什么的,但有一点我可以肯定的是,您没有得到关于您正在读取多少字节的指示。因此,您的代码肯定也有其他问题。