none
請教有關Stream的問題 RRS feed

  • 問題

  • 各位好:
    最近寫程式遇到一個問題,因為我是使用別人寫好的Class,而當中建構元的輸入參數為Stream,
    其中我的資料是位元組資料,所以必須將位元組資料寫入Stream當中,不過我檢查程式的流程沒有錯誤,
    但程式就是沒辦法輸出資料,想請各位先進幫我看一下位元組資料寫入的部份有沒有問題。

    Thanks for any message.
    Josh


    Code Snippet

    以下為我的程式:

    byte[] myBytes=new byte[16*1024];     //我的位元組資料
    Stream ms = new MemoryStream();
    ms.Write(myBytes, 0, myBytes.Length);
    Mp3Stream stream = new Mp3Stream(ms, 4096);


    以下為使用的類別:

    public class Mp3Stream : Stream
    {
    public Mp3Stream(Stream sourceStream, int chunkSize)
    {
    FormatRep = SoundFormat.Pcm16BitStereo;
    SourceStream = sourceStream;
    JZBitStream = new javazoom.jl.decoder.Bitstream(new javazoom.jl.decoder.BackStream(SourceStream, chunkSize));
    QueueOBuffer = new OBuffer16BitStereo();   
    JZDecoder.OutputBuffer = QueueOBuffer;
    }

    ...
    }
    2008年6月10日 下午 10:06

解答

  • 您好:

    我已經找到問題了,在將memorystream餵進去時,我沒有將MemoryStream的位置歸零,
    以至於程式進去捉不到資料,現在可以正常work了,感謝你的回答,謝謝。

    Josh


    Code Snippet

    FileStream fs1 =new FileStream("c:\\123.mp3", FileMode.Open, FileAccess.Read);
    BinaryReader br = new BinaryReader(fs1);

    byte[] myBytes=new byte[16*1024];     //我的位元組資料
    myBytes = br.ReadBytes(16*1024);

    Stream ms = new MemoryStream();
    ms.Write(myBytes, 0, myBytes.Length);

    ms.Seek(0, SeekOrigin.Begin);
    Mp3Stream stream = new Mp3Stream(ms, 4096);





    2008年6月11日 下午 12:48

所有回覆

  • 問一個問題.

    byte[] myBytes=new byte[16*1024];     //我的位元組資料
    Stream ms = new MemoryStream();
    ms.Write(myBytes, 0, myBytes.Length);

     

    你的myBytes有放資料嗎?

    只看到你把它new出來,就塞ms去了.

    所以myBytes=空的=ms=output nothing~

    2008年6月11日 上午 05:50
  • 您好:
    我的位元組資料是從檔案讀進來的,完整的程式碼如下,
    請問這樣讀入資料會有問題嗎?謝謝。

    Josh

    Code Snippet


    FileStream fs1 =new FileStream("c:\\123.mp3", FileMode.Open, FileAccess.Read);
    BinaryReader br = new BinaryReader(fs1);

    byte[] myBytes=new byte[16*1024];     //我的位元組資料
    myBytes = br.ReadBytes(16*1024);

    Stream ms = new MemoryStream();
    ms.Write(myBytes, 0, myBytes.Length);
    Mp3Stream stream = new Mp3Stream(ms, 4096);

    2008年6月11日 上午 07:11
  • FileStream fs1 =new FileStream("c:\\123.mp3", FileMode.Open, FileAccess.Read);
    BinaryReader br = new BinaryReader(fs1);

    byte[] myBytes=new byte[16*1024];     //我的位元組資料
    myBytes = br.ReadBytes(16*1024);

    Stream ms = new MemoryStream();
    ms.Write(myBytes, 0, myBytes.Length);
    Mp3Stream stream = new Mp3Stream(ms, 4096);

     

    這部份供參考

    FileStream fs1 =new FileStream("c:\\123.mp3", FileMode.Open, FileAccess.Read);

    byte[] myBytes=new byte[16*1024];//(為什麼你的長度是固定16*1024?,而不是用fs1.Length?,確定長度是對的?)

    fs1.Read(myBytes,0,myBytes.Length);

    MemoryStream ms=new MemoryStream(myBytes);

    Mp3Stream stream = new Mp3Stream(ms, 4096);//第二個參數是什麼?
    2008年6月11日 上午 07:42
  • 您好:

    我已經找到問題了,在將memorystream餵進去時,我沒有將MemoryStream的位置歸零,
    以至於程式進去捉不到資料,現在可以正常work了,感謝你的回答,謝謝。

    Josh


    Code Snippet

    FileStream fs1 =new FileStream("c:\\123.mp3", FileMode.Open, FileAccess.Read);
    BinaryReader br = new BinaryReader(fs1);

    byte[] myBytes=new byte[16*1024];     //我的位元組資料
    myBytes = br.ReadBytes(16*1024);

    Stream ms = new MemoryStream();
    ms.Write(myBytes, 0, myBytes.Length);

    ms.Seek(0, SeekOrigin.Begin);
    Mp3Stream stream = new Mp3Stream(ms, 4096);





    2008年6月11日 下午 12:48