Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
74680bd8
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
4
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
74680bd8
编写于
7月 10, 2018
作者:
S
serb
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8205361: Better RIFF reading support
Reviewed-by: prr, rhalade, mschoene
上级
633cdf48
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
44 addition
and
37 deletion
+44
-37
src/share/classes/com/sun/media/sound/DLSSoundbank.java
src/share/classes/com/sun/media/sound/DLSSoundbank.java
+4
-4
src/share/classes/com/sun/media/sound/RIFFReader.java
src/share/classes/com/sun/media/sound/RIFFReader.java
+22
-29
test/javax/sound/midi/Gervill/RiffReaderWriter/Skip.java
test/javax/sound/midi/Gervill/RiffReaderWriter/Skip.java
+18
-4
未找到文件。
src/share/classes/com/sun/media/sound/DLSSoundbank.java
浏览文件 @
74680bd8
...
...
@@ -548,7 +548,7 @@ public final class DLSSoundbank implements Soundbank {
long
count
=
riff
.
readUnsignedInt
();
if
(
size
-
8
!=
0
)
riff
.
skip
Bytes
(
size
-
8
);
riff
.
skip
(
size
-
8
);
for
(
int
i
=
0
;
i
<
count
;
i
++)
{
DLSModulator
modulator
=
new
DLSModulator
();
...
...
@@ -568,7 +568,7 @@ public final class DLSSoundbank implements Soundbank {
long
count
=
riff
.
readUnsignedInt
();
if
(
size
-
8
!=
0
)
riff
.
skip
Bytes
(
size
-
8
);
riff
.
skip
(
size
-
8
);
for
(
int
i
=
0
;
i
<
count
;
i
++)
{
DLSModulator
modulator
=
new
DLSModulator
();
...
...
@@ -661,7 +661,7 @@ public final class DLSSoundbank implements Soundbank {
long
loops
=
riff
.
readInt
();
if
(
size
>
20
)
riff
.
skip
Bytes
(
size
-
20
);
riff
.
skip
(
size
-
20
);
for
(
int
i
=
0
;
i
<
loops
;
i
++)
{
DLSSampleLoop
loop
=
new
DLSSampleLoop
();
...
...
@@ -671,7 +671,7 @@ public final class DLSSoundbank implements Soundbank {
loop
.
length
=
riff
.
readUnsignedInt
();
sampleOptions
.
loops
.
add
(
loop
);
if
(
size2
>
16
)
riff
.
skip
Bytes
(
size2
-
16
);
riff
.
skip
(
size2
-
16
);
}
}
...
...
src/share/classes/com/sun/media/sound/RIFFReader.java
浏览文件 @
74680bd8
...
...
@@ -172,49 +172,41 @@ public final class RIFFReader extends InputStream {
}
}
public
final
long
skipBytes
(
long
n
)
throws
IOException
{
if
(
n
<
0
)
@Override
public
long
skip
(
final
long
n
)
throws
IOException
{
if
(
n
<=
0
||
avail
==
0
)
{
return
0
;
long
skipped
=
0
;
while
(
skipped
!=
n
)
{
long
s
=
skip
(
n
-
skipped
);
if
(
s
<
0
)
break
;
if
(
s
==
0
)
Thread
.
yield
();
skipped
+=
s
;
}
return
skipped
;
}
public
long
skip
(
long
n
)
throws
IOException
{
if
(
avail
==
0
)
return
-
1
;
if
(
n
>
avail
)
{
long
len
=
stream
.
skip
(
avail
);
if
(
len
!=
-
1
)
filepointer
+=
len
;
avail
=
0
;
return
len
;
}
else
{
long
ret
=
stream
.
skip
(
n
);
if
(
ret
==
-
1
)
{
avail
=
0
;
return
-
1
;
// will not skip more than
long
remaining
=
Math
.
min
(
n
,
avail
);
while
(
remaining
>
0
)
{
// Some input streams like FileInputStream can return more bytes,
// when EOF is reached.
long
ret
=
Math
.
min
(
stream
.
skip
(
remaining
),
remaining
);
if
(
ret
==
0
)
{
// EOF or not? we need to check.
Thread
.
yield
();
if
(
stream
.
read
()
==
-
1
)
{
avail
=
0
;
break
;
}
ret
=
1
;
}
remaining
-=
ret
;
avail
-=
ret
;
filepointer
+=
ret
;
return
ret
;
}
return
n
-
remaining
;
}
@Override
public
int
available
()
{
return
(
int
)
avail
;
}
public
void
finish
()
throws
IOException
{
if
(
avail
!=
0
)
{
skip
Bytes
(
avail
);
skip
(
avail
);
}
}
...
...
@@ -337,6 +329,7 @@ public final class RIFFReader extends InputStream {
return
ch1
+
(
ch2
<<
8
)
|
(
ch3
<<
16
)
|
(
ch4
<<
24
);
}
@Override
public
void
close
()
throws
IOException
{
finish
();
if
(
this
==
root
)
...
...
test/javax/sound/midi/Gervill/RiffReaderWriter/Skip.java
浏览文件 @
74680bd8
...
...
@@ -27,9 +27,8 @@
import
java.io.File
;
import
java.io.FileInputStream
;
import
javax.sound.sampled.*
;
import
com.sun.media.sound.*
;
import
com.sun.media.sound.RIFFReader
;
import
com.sun.media.sound.RIFFWriter
;
public
class
Skip
{
...
...
@@ -40,6 +39,11 @@ public class Skip {
}
public
static
void
main
(
String
[]
args
)
throws
Exception
{
test
(
false
);
test
(
true
);
}
private
static
void
test
(
boolean
customStream
)
throws
Exception
{
RIFFWriter
writer
=
null
;
RIFFReader
reader
=
null
;
File
tempfile
=
File
.
createTempFile
(
"test"
,
".riff"
);
...
...
@@ -51,7 +55,17 @@ public class Skip {
chunk
.
write
((
byte
)
44
);
writer
.
close
();
writer
=
null
;
FileInputStream
fis
=
new
FileInputStream
(
tempfile
);
final
FileInputStream
fis
;
if
(
customStream
)
{
fis
=
new
FileInputStream
(
tempfile
);
}
else
{
fis
=
new
FileInputStream
(
tempfile
)
{
@Override
public
long
skip
(
long
n
)
{
return
0
;
}
};
}
reader
=
new
RIFFReader
(
fis
);
RIFFReader
readchunk
=
reader
.
nextChunk
();
reader
.
skip
(
1
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录