相关疑难解决方法(0)

如何将短数组转换为字节数组

我发现将一个短数组转换为字节数组,将字节数组转换为短数组,但不是短数组转换为字节数组.

以下是导致转换的代码

while(!stopped)
        { 
            Log.i("Map", "Writing new data to buffer");
            short[] buffer = buffers[ix++ % buffers.length];

            N = recorder.read(buffer,0,buffer.length);
            track.write(buffer, 0, buffer.length);

            byte[] bytes2 = new byte[N];
Run Code Online (Sandbox Code Playgroud)

我试过了

              int i = 0;
              ByteBuffer byteBuf = ByteBuffer.allocate(N);
              while (buffer.length >= i) {
                  byteBuf.putShort(buffer[i]);
                  i++;
        }

bytes2 = byteBuf.array();
Run Code Online (Sandbox Code Playgroud)

和

    ByteBuffer.wrap(bytes2).order(ByteOrder.LITTLE_ENDIAN).asShortBuffer().put(buffer);
Run Code Online (Sandbox Code Playgroud)

但是我在两者上都收到了这个错误(错误如果不完全相同但两者非常相似):

05-29 13:41:12.021:W/AudioTrack(9758):gainBuffer()轨道0x30efa0禁用,重启

05-29 13:41:12.857:W/AudioWorker(9758):读取语音AudioWorker时出错

05-29 13:41:12.857:W/AudioWorker(9758):java.nio.BufferOverflowException

05-29 13:41:12.857:W/AudioWorker(9758):at java.nio.ShortBuffer.put(ShortBuffer.java:422)

05-29 13:41:12.857:W/AudioWorker(9758):at java.nio.ShortToByteBufferAdapter.put(ShortToByteBufferAdapter.java:210)

05-29 13:41:12.857:W/AudioWorker(9758):at java.nio.ShortBuffer.put(ShortBuffer.java:391)

05-29 13:41:12.857:W/AudioWorker(9758):at com.avispl.nicu.audio.AudioWorker.run(AudioWorker.java:126)

并且只是在这里提供尽可能多的信息是使用字节数组之后的代码

Log.i("Map", "test");
                //convert to ulaw
                read(bytes2, …
Run Code Online (Sandbox Code Playgroud)

java arrays

15
推荐指数
2
解决办法
2万
查看次数

在Java中将byte []转换为short []

可能重复:
字节数组到短数组并在java中再返回

encodeAudio()Xuggler中的方法具有以下参数:

  • int streamIndes
  • 短[]样本
  • 很长一段时间
  • TimeUnit单位

  • 使用TargetDataLinefrom javax.sound.sampled我可以将数据读入byte[]数组

    byte[] tempBuffer = new byte[10000];
    fromMic.read(tempBuffer,0,tempBuffer.length);
    
    Run Code Online (Sandbox Code Playgroud)

    但问题在于samples论证需要short[]

    java

    5
    推荐指数
    1
    解决办法
    1万
    查看次数

    保存大型短阵列android

    我基本上正在寻找一种方法来保存和重新加载几个大型阵列(大约500万short)在Android上以一种快速的方式.我的应用程序需要以一种我可以在以后回复它们的方式保存它们,所以我不能只将它们保存在内存中......

    到目前为止,我已经尝试将它们转换为byte[]数组并且它们似乎成功保存,但我无法获取数据,这是我的保存代码的工作方式(它实际上是分离函数,在这里简化):

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ObjectOuputStream oos = new ObjectOutputStream(baos);
    oos.writeObject(data);
    oos.close();
    baos.close();
    FileOutputStream fos = new FileOutputStream(filename); // valid absolute path
    fos.write(baos.toByteArray());
    fos.close();
    
    Run Code Online (Sandbox Code Playgroud)

    装载部件是我卡住的地方,我如何short[]从一个byte[]?我还读到数据库可能也可以工作,但是它足够快吗?

    我看了看Stackoverflow和谷歌,似乎找不到有类似问题的人,或者至少找到解决方案,但作为一个初学者,我可能会错过一些明显的东西......

    java io serialization android

    4
    推荐指数
    1
    解决办法
    3188
    查看次数

    在JAVA中将短数组转换为字节数组

    我对如何将short数组转换为byte数组感到困惑.我有下面的short数组

    short[] shrt_array = new short[]{ 0x4 , 0xd7 , 0x86, 0x8c, 0xb2, 0x14, 0xc, 0x8b, 0x2d, 0x39, 0x2d, 0x2d, 0x27, 0xcb, 0x2e, 0x79, 0x46, 0x36, 0x9d , 0x62, 0x2c };
    
    Run Code Online (Sandbox Code Playgroud)

    通过使用此链接将短数组转换为字节数组这两种转换方法,我得到以下两个不同的byte数组:

     expectedByteArray = new byte[] {
        (byte) 0x4, (byte) 0xd7, (byte) 0x86, 
        (byte) 0x8c, (byte) 0xb2, (byte) 0x14,  
        (byte) 0xc, (byte) 0x8b, (byte) 0x2d,
        (byte) 0x39, (byte) 0x2d, (byte) 0x2d, 
        (byte) 0x27, (byte) 0xcb, (byte) 0x2e, 
        (byte) 0x79, (byte) …
    Run Code Online (Sandbox Code Playgroud)

    java byte bytearray short

    3
    推荐指数
    2
    解决办法
    6089
    查看次数

    标签 统计

    java ×4

    android ×1

    arrays ×1

    byte ×1

    bytearray ×1

    io ×1

    serialization ×1

    short ×1