Flex文件读取问题

时间:2011-02-02 09:09:06

标签: java flex actionscript

我在从Flex读取文件时遇到问题。该文件包含base64encoded字符串。当我读取文件时,我得到长度为47856,解码后的base64字节数组长度为34157。

当我从java读取相同的文件时,我得到的长度分别为48068和35733。

有什么问题?

 private function init():void{
        var file:File = File.desktopDirectory.resolvePath("Files/sample.txt");
        stream = new FileStream();
        stream.open(file, FileMode.READ);
        var str:String = stream.readUTFBytes(stream.bytesAvailable);
        stream.close();
        str = str.replace(File.lineEnding, "\n");
        contents.text = str;
        fileName.text = file.name;
    }


public function playSound(contents:String):void{



    try{
        var byteData: ByteArray;

        byteData = new ByteArray();
        byteData.writeUTFBytes(contents);
        var dec:Base64Decoder = new Base64Decoder();
        dec.decode(contents);
        byteData = dec.toByteArray();



        Alert.show("byte Array   " + byteData.toString().length +" ::  " +contents.length);


    }

这是我用来读取文件的java代码......无论我期待什么结果都是在java方面实现的。

private static String readFile(String path) throws IOException {  
        FileInputStream stream = new FileInputStream(new File(path)); 
        try {   
            FileChannel fc = stream.getChannel(); 
            MappedByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size());   

            return Charset.defaultCharset().decode(bb).toString();   } 
        finally {     stream.close();   
        } 
    } 

我在打印长度的Java代码

byte[] decodedBase64 = new byte[byteLength];
                String speexData = null;
                try {
                    speexData =   readFile(userDir +"//" +xmlFileName);
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }

                // System.out.println("sa " + sa);

                try{

                    decodedBase64=  Base64.decodeToByteArray(speexData);
                    System.out.println("decodednase64 length " + decodedBase64.length +" :: " +speexData.length());
                }
                catch(Exception e){
                }

1 个答案:

答案 0 :(得分:0)

你必须发布你的java代码来展示你在那里做的事情。

然而,在不知道更多的情况下,我可以猜测并说当你替换行结尾时,你可能每次都删除一个字节(如果它是\ r \ n而你正在制作它\ n,对于例子)。