【问题标题】:byte[] to double representation [duplicate]字节 [] 到双重表示 [重复]
【发布时间】:2015-03-30 16:49:02
【问题描述】:

我在阅读 wav 时遇到了一些问题。 我必须为每个样本读取一个 wav 文件样本。

为此,我首先尝试打印我的 128 个第一批样本,看看我是否有好的值(我知道它们是什么)。为此:

private int bytesToInt(byte[] fenetre, int debut, int nbByte) {
    int res = 0;
    for (int i = 0; i < nbByte; i++) {
        res <<= 8;
        res += fenetre[debut + i];
    }
    return res;
}

public void afficherPremiereFenetre() throws IOException {
    int tailleFenetre = 128;
    int nbBytePerSample = au.getFormat().getFrameSize();
    int nbBytePerFrame = tailleFenetre * nbBytePerSample;
    byte[] fenetre = new byte[nbBytePerFrame];
    au.read(fenetre, 0, nbBytePerFrame);
    for (int i = 0; i < nbBytePerFrame; i += nbBytePerSample) {
        System.out
                .println((double) bytesToInt(fenetre, i, nbBytePerSample));
    }
}

所以我的问题是:如何真正将我的 byte[] 帧转换为双倍?

【问题讨论】:

标签: java casting double bytearray


【解决方案1】:

您可以通过java.nio.ByteBuffer 实现此目的

ByteBuffer.wrap(fenetre).getDouble();

给定一个直接字节缓冲区,Java 虚拟机将做出最好的处理 努力直接在其上执行本机 I/O 操作。这就对了 将尝试避免将缓冲区的内容复制到(或从) 每次调用其中一个之前(或之后)的中间缓冲区 底层操作系统的原生 I/O 操作。

【讨论】:

    猜你喜欢
    • 2022-01-18
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 2019-02-22
    • 2018-06-04
    • 2014-11-24
    • 1970-01-01
    相关资源
    最近更新 更多