提交 c31cd908 编写于 作者: W wizardforcel

sample => 样例

上级 45801a96
......@@ -443,7 +443,7 @@ xjc schema1.xsd schema2.xsd schema3.xsd \
### 自定义命名空间前缀
所有标准 JAXB 绑定声明必须以一个映射到 JAXB 名称空间 URI [http://java.sun.com/xml/ns/jaxb](http://java.sun.com/xml/ns/jaxb) 的名称空间前缀开头。例如,在该样中,使用 `jxb:`。为此,您希望使用标准 JAXB 绑定声明**自定义的任何模式必须**在模式文件的顶部包含 JAXB 名称空间声明和 JAXB 版本号。例如,在 `po.xsd` 中的 Customize Inline 示例中,名称空间声明如下:
所有标准 JAXB 绑定声明必须以一个映射到 JAXB 名称空间 URI [http://java.sun.com/xml/ns/jaxb](http://java.sun.com/xml/ns/jaxb) 的名称空间前缀开头。例如,在该样中,使用 `jxb:`。为此,您希望使用标准 JAXB 绑定声明**自定义的任何模式必须**在模式文件的顶部包含 JAXB 名称空间声明和 JAXB 版本号。例如,在 `po.xsd` 中的 Customize Inline 示例中,名称空间声明如下:
```
<xsd:schema
......
......@@ -26,7 +26,7 @@ Streams 支持许多不同类型的数据,包括简单字节,原始数据类
上图所示的数据源和数据目的地可以是保存,生成或使用数据的任何内容。显然这包括磁盘文件,但源或目标也可以是另一个程序,外围设备,网络套接字或阵列。
在下一节中,我们将使用最基本的流类型字节流来演示流 I / O 的常见操作。对于样输入,我们将使用示例文件 [`xanadu.txt`](examples/xanadu.txt) ,其中包含以下经文:
在下一节中,我们将使用最基本的流类型字节流来演示流 I / O 的常见操作。对于样输入,我们将使用示例文件 [`xanadu.txt`](examples/xanadu.txt) ,其中包含以下经文:
```
In Xanadu did Kubla Khan
......
......@@ -6,7 +6,7 @@
[`DataStreams`](examples/DataStreams.java) 示例通过写出一组数据记录来演示数据流,然后再次读取它们。每条记录包含三个与发票上的项目相关的值,如下表所示:
| 订单记录 | 数据类型 | 数据描述 | 输出方法 | 输入法 | 样价值 |
| 订单记录 | 数据类型 | 数据描述 | 输出方法 | 输入法 | 样价值 |
| --- | --- | --- | --- | --- | --- |
| 1 | `double` | 商品价格 | `DataOutputStream.writeDouble` | `DataInputStream.readDouble` | `19.99` |
| 2 | `int` | 单位数 | `DataOutputStream.writeInt` | `DataInputStream.readInt` | `12` |
......
......@@ -405,7 +405,7 @@ public class LookAndFeelDemo implements ActionListener {
```
当您下载 [JDK 和 JavaFX 演示和样](http://www.oracle.com/technetwork/java/javase/downloads/index.html)包并打开它时,有一个`demo\jfc`文件夹包含一个名为`SwingSet2`的演示程序。该程序具有图形丰富的 GUI,允许您从菜单中更改外观。此外,如果您使用 Java(金属)外观,您可以选择各种不同的主题。各种主题的文件(例如,`RubyTheme.java`)可在`SwingSet2\src`文件夹中找到。
当您下载 [JDK 和 JavaFX 演示和样](http://www.oracle.com/technetwork/java/javase/downloads/index.html)包并打开它时,有一个`demo\jfc`文件夹包含一个名为`SwingSet2`的演示程序。该程序具有图形丰富的 GUI,允许您从菜单中更改外观。此外,如果您使用 Java(金属)外观,您可以选择各种不同的主题。各种主题的文件(例如,`RubyTheme.java`)可在`SwingSet2\src`文件夹中找到。
这是“海洋”主题,这是跨平台 Java(金属)外观的默认主题:
......
......@@ -8,7 +8,7 @@
* [`createTransferable(JComponent)`](https://docs.oracle.com/javase/8/docs/api/javax/swing/TransferHandler.html#createTransferable-javax.swing.JComponent-) - 此方法将要导出的数据捆绑到 [`Transferable`](https://docs.oracle.com/javase/8/docs/api/java/awt/datatransfer/Transferable.html) 对象中以准备传输。
* [`exportDone(JComponent, Transferable, int)`](https://docs.oracle.com/javase/8/docs/api/javax/swing/TransferHandler.html#exportDone-javax.swing.JComponent-java.awt.datatransfer.Transferable-int-) - 导出完成后调用此方法。当操作是`MOVE`时,传输完成后需要从源中删除数据 - 此方法是进行任何必要清理的地方。
## 样导出方法
## 样导出方法
以下是导出方法的一些示例实现:
......
......@@ -16,6 +16,6 @@
要运行示例程序,请在命令行中指定语言和国家/地区。本节将向您展示一些示例。
## [国际化样计划](steps.html)
## [国际化样计划](steps.html)
国际化该计划只需几步。你会惊讶于它是多么容易。
\ No newline at end of file
# 国际化样计划
# 国际化样计划
> 原文: [https://docs.oracle.com/javase/tutorial/i18n/intro/steps.html](https://docs.oracle.com/javase/tutorial/i18n/intro/steps.html)
......
......@@ -79,7 +79,7 @@ English (United States), US Dollar: $9,876,543.21
请注意, [`Currency`](https://docs.oracle.com/javase/8/docs/api/java/util/Currency.html) 类的设计使得任何给定货币永远不会有多个 [`Currency`](https://docs.oracle.com/javase/8/docs/api/java/util/Currency.html) 实例。因此,没有公共构造器。如前面的代码示例所示,使用 [`getInstance`](https://docs.oracle.com/javase/8/docs/api/java/util/Currency.html#getInstance-java.util.Locale-) 方法获得 [`Currency`](https://docs.oracle.com/javase/8/docs/api/java/util/Currency.html) 实例。
[`InternationalizedMortgageCalculator.java`](examples/InternationalizedMortgageCalculator.java) 也演示了如何使用 [`Currency`](https://docs.oracle.com/javase/8/docs/api/java/util/Currency.html) 类。 (请注意,此示例不转换货币值。)以下使用 en-US 语言环境:
[`InternationalizedMortgageCalculator.java`](examples/InternationalizedMortgageCalculator.java) 也演示了如何使用 [`Currency`](https://docs.oracle.com/javase/8/docs/api/java/util/Currency.html) 类。 (请注意,此示例不转换货币值。)以下使用 en-US 语言环境:
![Mortgage Calculator, en-US locale](img/eedc16110eba9cb8aae31edccfdd45c0.jpg)
......@@ -87,7 +87,7 @@ English (United States), US Dollar: $9,876,543.21
![Mortgage Calculator, en-UK locale](img/76dea77f5323c96b651702172f395070.jpg)
[`InternationalizedMortgageCalculator.java`](examples/InternationalizedMortgageCalculator.java) 需要以下资源文件:
[`InternationalizedMortgageCalculator.java`](examples/InternationalizedMortgageCalculator.java) 需要以下资源文件:
* [`resources/Resources.properties`](examples/resources/Resources.properties)
* [`resources/Resources_ar.properties`](examples/resources/Resources_ar.properties)
......
......@@ -15,6 +15,6 @@ _Unicode_ 是一种计算行业标准,旨在对全世界书面语言中使用
* [术语](terminology.html) - 解释代码点和其他术语。
* [辅助字符作为代理](supplementaryChars.html) - 16 位代理用于实现补充字符,这些字符不能作为单个原始`char`数据类型实现。
* [字符和字符串 API](characterClass.html) - `Character``String`和相关类的相关 API 列表。
* [用法](usage.html) - 提供了几个有用的代码片段。
* [用法](usage.html) - 提供了几个有用的代码片段。
* [设计注意事项](design.html) - 请注意设计注意事项,以确保您的应用程序可以使用任何语言脚本。
* [更多信息](info.html) - 提供了更多资源的列表。
\ No newline at end of file
......@@ -13,7 +13,7 @@
| 方法) | 描述 |
| --- | --- |
| [`toChars(int codePoint, char[] dst, int dstIndex)`](https://docs.oracle.com/javase/8/docs/api/java/lang/Character.html#toChars-int-char:A-int-)
[`toChars(int codePoint)`](https://docs.oracle.com/javase/8/docs/api/java/lang/Character.html#toChars-int-) | 将指定的 Unicode 代码点转换为其 UTF-16 表示形式,并将其放在`char`数组中。样用法:`Character.toChars(0x10400)` |
[`toChars(int codePoint)`](https://docs.oracle.com/javase/8/docs/api/java/lang/Character.html#toChars-int-) | 将指定的 Unicode 代码点转换为其 UTF-16 表示形式,并将其放在`char`数组中。样用法:`Character.toChars(0x10400)` |
| [`toCodePoint(char high, char low)`](https://docs.oracle.com/javase/8/docs/api/java/lang/Character.html#toCodePoint-char-char-)
[`toCodePoint(CharSequence, int)`](https://docs.oracle.com/javase/8/docs/api/java/lang/Character.html#toCodePoint-java.lang.CharSequence-int-)
[`toCodePoint(char[], int, int)`](https://docs.oracle.com/javase/8/docs/api/java/lang/Character.html#toCodePoint-char:A-int-int-) | 将指定的参数转换为其补充代码点值。不同的方法接受不同的输入格式。 |
......
# 样用法
# 样用法
> 原文: [https://docs.oracle.com/javase/tutorial/i18n/text/usage.html](https://docs.oracle.com/javase/tutorial/i18n/text/usage.html)
......
......@@ -14,7 +14,7 @@
有关这些问题的更多信息,或者如果您需要更多控制来处理这些问题,请参阅[](../../2d/text/textlayoutbidirectionaltext.html) [2D 图形](../../2d/index.html)轨迹中使用双向文本。
[`BidiTextComponentDemo.java`](examples/BidiTextComponentDemo.java) 基于 [`TextComponentDemo.java`](../../uiswing/examples/components/index.html#TextComponentDemo) ,在 [`JTextPane`](https://docs.oracle.com/javase/8/docs/api/javax/swing/JTextPane.html) 对象中显示双向文本。在大多数情况下,Java 平台可以确定双向 Unicode 文本的方向性:
[`BidiTextComponentDemo.java`](examples/BidiTextComponentDemo.java) 基于 [`TextComponentDemo.java`](../../uiswing/examples/components/index.html#TextComponentDemo) ,在 [`JTextPane`](https://docs.oracle.com/javase/8/docs/api/javax/swing/JTextPane.html) 对象中显示双向文本。在大多数情况下,Java 平台可以确定双向 Unicode 文本的方向性:
![BidiTextComponentDemo.java](img/d025fc7a6bf76f85c7a77c8a495b580f.jpg)
......@@ -44,7 +44,7 @@ textPane.setComponentOrientation(
有关详细信息,请参见[设置组件方向](#setting-component-orientation)部分。
在可编辑文本中,_ 插入符 _ 用于以图形方式表示当前插入点,即文本中将插入新字符的位置。在 [`BidiTextComponentDemo.java`](examples/BidiTextComponentDemo.java)中,插入符号包含一个小三角形,指向插入字符的显示方向。
在可编辑文本中,_ 插入符 _ 用于以图形方式表示当前插入点,即文本中将插入新字符的位置。在 [`BidiTextComponentDemo.java`](examples/BidiTextComponentDemo.java)中,插入符号包含一个小三角形,指向插入字符的显示方向。
默认情况下, [`JTextComponent`](https://docs.oracle.com/javase/8/docs/api/javax/swing/text/JTextComponent.html) 对象创建一个键映射( [`Keymap`](https://docs.oracle.com/javase/8/docs/api/javax/swing/text/Keymap.html) 类型),由所有 [`JTextComponent`](https://docs.oracle.com/javase/8/docs/api/javax/swing/text/JTextComponent.html) 实例共享作为默认键映射。键映射允许应用程序将键击绑定到操作。默认键映射(用于支持插入符号移动的 [`JTextComponent`](https://docs.oracle.com/javase/8/docs/api/javax/swing/text/JTextComponent.html) 对象)包括使用左右箭头键向前和向后移动插入符号之间的绑定,它通过双向文本支持插入符号移动。
......@@ -60,7 +60,7 @@ textPane.setComponentOrientation(
Swing 的布局管理器了解区域设置如何影响 UI;没有必要为每个区域设置创建新布局。例如,在文本从右向左流动的区域设置中,布局管理器将以相同的方向排列组件。
[`InternationalizedMortgageCalculator.java`](../format/examples/InternationalizedMortgageCalculator.java) 已定位于美国英语;英国,英国;法国,法国;法国,加拿大;和阿拉伯语,沙特阿拉伯。
[`InternationalizedMortgageCalculator.java`](../format/examples/InternationalizedMortgageCalculator.java) 已定位于美国英语;英国,英国;法国,法国;法国,加拿大;和阿拉伯语,沙特阿拉伯。
以下使用 en-US 语言环境:
......@@ -70,7 +70,7 @@ Swing 的布局管理器了解区域设置如何影响 UI;没有必要为每个
![Mortgage Calculator, ar-SA locale](img/e45d401000322f467894b528f43a321f.jpg)
请注意,组件的布局方向与相应的区域设置相同:en-US 从左到右,ar-SA 从右到左。 [`InternationalizedMortgageCalculator.java`](../format/examples/InternationalizedMortgageCalculator.java)调用方法 [`applyComponentOrientation`](https://docs.oracle.com/javase/8/docs/api/java/awt/Component.html#applyComponentOrientation-java.awt.ComponentOrientation-)[`getOrientation`](https://docs.oracle.com/javase/8/docs/api/java/awt/ComponentOrientation.html#getOrientation-java.util.Locale-) 按区域设置指定其组件的方向:
请注意,组件的布局方向与相应的区域设置相同:en-US 从左到右,ar-SA 从右到左。 [`InternationalizedMortgageCalculator.java`](../format/examples/InternationalizedMortgageCalculator.java)调用方法 [`applyComponentOrientation`](https://docs.oracle.com/javase/8/docs/api/java/awt/Component.html#applyComponentOrientation-java.awt.ComponentOrientation-)[`getOrientation`](https://docs.oracle.com/javase/8/docs/api/java/awt/ComponentOrientation.html#getOrientation-java.util.Locale-) 按区域设置指定其组件的方向:
```
private static JFrame frame;
......@@ -90,7 +90,7 @@ private static void createAndShowGUI(Locale currentLocale) {
```
[`InternationalizedMortgageCalculator.java`](../format/examples/InternationalizedMortgageCalculator.java) 需要以下资源文件:
[`InternationalizedMortgageCalculator.java`](../format/examples/InternationalizedMortgageCalculator.java) 需要以下资源文件:
* [`resources/Resources.properties`](../format/examples/resources/Resources.properties)
* [`resources/Resources_ar.properties`](../format/examples/resources/Resources_ar.properties)
......
......@@ -29,7 +29,7 @@ ResourceBundle getBundle(
已安装的`ResourceBundleControlProvider` SPI 实现取代了默认的`ResourceBundle.Control`类(定义了默认的 bundle 加载过程)。因此,`ResourceBundleControlProvider`接口使您可以使用任何自定义`ResourceBundle.Control`类,而无需对应用程序的源代码进行任何其他更改。此外,此接口使您无需引用任何自定义`ResourceBundle.Control`类即可编写应用程序。
[``RBCPTest.java`` ](examples/rbcpsample/src/RBCPTest.java)示例显示了如何实现`ResourceBundleControlProvider`接口以及如何将其打包为已安装的扩展。此样包装在 zip 文件 `[RBCPTest.zip](examples/rbcpsample/RBCPTest.zip)`中,由以下文件组成:
[``RBCPTest.java`` ](examples/rbcpsample/src/RBCPTest.java)示例显示了如何实现`ResourceBundleControlProvider`接口以及如何将其打包为已安装的扩展。此样包装在 zip 文件 `[RBCPTest.zip](examples/rbcpsample/RBCPTest.zip)`中,由以下文件组成:
* `src`
* [``java.util.spi.ResourceBundleControlProvider``](examples/rbcpsample/src/java.util.spi.ResourceBundleControlProvider)
......@@ -61,7 +61,7 @@ ResourceBundle getBundle(
5. [将供应器,其必需的类和配置文件打包在 JAR 文件中。](#package-provider)
6. [运行 RBCPTest 程序。](#run-rbcptest)
[``RBCPTest.java`` ](examples/rbcpsample/src/RBCPTest.java)使用`ResourseBundle.Control`的两个实现:
[``RBCPTest.java`` ](examples/rbcpsample/src/RBCPTest.java)使用`ResourseBundle.Control`的两个实现:
* [``PropertiesResourceBundleControlProvider.java`` ](examples/rbcpsample/src/rbcp/PropertiesResourceBundleControlProvider.java):这与[自定义资源包加载](../resbundle/control.html)中定义的`ResourceBundle.Control`实现相同。
......@@ -118,7 +118,7 @@ type = XML
该接口包含一种方法, [`ResourceBundle.Control getControl(String baseName)`](https://docs.oracle.com/javase/8/docs/api/java/util/spi/ResourceBundleControlProvider.html#getControl-java.lang.String-) 方法。参数`baseName`是资源包的名称。在`getBundle`的方法定义中,指定在给定资源包名称的情况下应返回的`ResourceBundle.Control`实例。
`RBCPTest`包含`ResourceBundleControlProvider`接口的两种实现方式, [``PropertiesResourceBundleControlProvider.java``](examples/rbcpsample/src/rbcp/PropertiesResourceBundleControlProvider.java)[``XMLResourceBundleControlProvider.java``](examples/rbcpsample/src/rbcp/XMLResourceBundleControlProvider.java)。如果资源包的基本名称以`resources.RBControl`开头,则`PropertiesResourceBundleControlProvider.getBundle`方法返回`PropertiesResourceBundleControl`的实例(在此示例中,所有资源文件都包含在包`resources`中):
`RBCPTest`包含`ResourceBundleControlProvider`接口的两种实现方式, [``PropertiesResourceBundleControlProvider.java``](examples/rbcpsample/src/rbcp/PropertiesResourceBundleControlProvider.java)[``XMLResourceBundleControlProvider.java``](examples/rbcpsample/src/rbcp/XMLResourceBundleControlProvider.java)。如果资源包的基本名称以`resources.RBControl`开头,则`PropertiesResourceBundleControlProvider.getBundle`方法返回`PropertiesResourceBundleControl`的实例(在此示例中,所有资源文件都包含在包`resources`中):
```
package rbcp;
......
......@@ -101,7 +101,7 @@ Java SE 使用 [Unicode 双向算法](http://unicode.org/reports/tr9/),这是
逻辑突出显示更容易实现,因为所选字符在文本中始终是连续的。
[``SelectionSample.java``](examples/SelectionSample.java)演示了逻辑突出显示:
[``SelectionSample.java``](examples/SelectionSample.java)演示了逻辑突出显示:
![Selection Sample; demonstration of logical highlighting](img/e88eed1bd0b81ce5fe1b2dd7439e2210.jpg)
......@@ -154,7 +154,7 @@ Java SE 使用 [Unicode 双向算法](http://unicode.org/reports/tr9/),这是
如果要使用自定义插入符号,可以从 [`TextLayout`](https://docs.oracle.com/javase/8/docs/api/java/awt/font/TextLayout.html) 中检索插入符号的位置和角度,并自行绘制。
[``HitTestSample.java``](examples/HitTestSample.java)显示双重插入符号。
[``HitTestSample.java``](examples/HitTestSample.java)显示双重插入符号。
点击 _o_ 侧面的 _o_ 朝向希伯来语文本记录最终用户在 _o_ 之后点击,这是英文文本的一部分。这将 _o_ 旁边的弱(黑色)插入符号和 _H_ 前面的强插入符号(红色)定位:
......@@ -168,7 +168,7 @@ Java SE 使用 [Unicode 双向算法](http://unicode.org/reports/tr9/),这是
当用户按下左箭头键或右箭头键时,您还可以使用 [`TextLayout`](https://docs.oracle.com/javase/8/docs/api/java/awt/font/TextLayout.html) 类来确定最终的插入偏移。给定表示当前插入偏移的`TextHitInfo`对象, [`getNextRightHit`](https://docs.oracle.com/javase/8/docs/api/java/awt/font/TextLayout.html#getNextRightHit-java.awt.font.TextHitInfo-) 方法返回 [`TextHitInfo`](https://docs.oracle.com/javase/8/docs/api/java/awt/font/TextHitInfo.html) 对象,如果按下右箭头键,则表示正确的插入偏移。 [`getNextLeftHit`](https://docs.oracle.com/javase/8/docs/api/java/awt/font/TextLayout.html#getNextLeftHit-java.awt.font.TextHitInfo-) 方法为左箭头键提供相同的信息。
以下摘自样 [``ArrowKeySample.java``](examples/ArrowKeySample.java)演示了当用户按下左箭头键或右箭头键时如何确定生成的插入偏移量:
以下摘自样 [``ArrowKeySample.java``](examples/ArrowKeySample.java)演示了当用户按下左箭头键或右箭头键时如何确定生成的插入偏移量:
```
public class ArrowKeySample extends JPanel implements KeyListener {
......
......@@ -36,7 +36,7 @@ Java Sound API 包括对数字音频和 MIDI 数据的支持。这两个主要
## 什么是 Sampled Audio?
[`javax.sound.sampled`](https://docs.oracle.com/javase/8/docs/api/javax/sound/sampled/package-summary.html) 包处理数字音频数据,Java Sound API 将其称为采样音频。 _ 样 _ 是信号的连续快照。在音频的情况下,信号是声波。麦克风将声学信号转换为相应的模拟电信号,并且模数转换器将该模拟信号转换为采样的数字形式。下图显示了录音中的短暂时刻。
[`javax.sound.sampled`](https://docs.oracle.com/javase/8/docs/api/javax/sound/sampled/package-summary.html) 包处理数字音频数据,Java Sound API 将其称为采样音频。 _ 样 _ 是信号的连续快照。在音频的情况下,信号是声波。麦克风将声学信号转换为相应的模拟电信号,并且模数转换器将该模拟信号转换为采样的数字形式。下图显示了录音中的短暂时刻。
![A Sampled Sound Wave](img/812b3bac88ee9a1f9f25947ccdd1189e.jpg)
......@@ -44,7 +44,7 @@ Java Sound API 包括对数字音频和 MIDI 数据的支持。这两个主要
该图描绘了垂直轴上的声压(振幅)和水平轴上的时间。以一定速率周期性地测量模拟声波的幅度,从而产生包括数字音频信号的离散样本(图中的红色数据点)。中心水平线表示零幅度;线上方的点是正值样本,下面的点是负数。模拟信号的数字近似的精度取决于其在时间上的分辨率(_ 采样率 _)及其 _ 量化 _,或幅度分辨率(用于表示每个的比特数)样品)。作为参考,记录存储在光盘上的音频每秒采样 44,100 次,每个采样 16 位。
该图描绘了垂直轴上的声压(振幅)和水平轴上的时间。以一定速率周期性地测量模拟声波的幅度,从而产生包括数字音频信号的离散样例(图中的红色数据点)。中心水平线表示零幅度;线上方的点是正值样例,下面的点是负数。模拟信号的数字近似的精度取决于其在时间上的分辨率(_ 采样率 _)及其 _ 量化 _,或幅度分辨率(用于表示每个的比特数)样例)。作为参考,记录存储在光盘上的音频每秒采样 44,100 次,每个采样 16 位。
这里使用的术语“采样音频”略有松散。可以以离散的间隔对声波进行采样,同时保持模拟形式。但是,出于 Java Sound API 的目的,“采样音频”等同于“数字音频”。
......
......@@ -6,7 +6,7 @@
为了支持对基本音频输入和输出的关注,Java Sound API 提供了在各种音频数据格式之间进行转换以及读取和编写常见类型的声音文件的方法。但是,它并不试图成为一个全面的声音文件工具包。 Java Sound API 的特定实现不需要支持大量的文件类型或数据格式转换。第三方服务提供商可以提供“插入”现有实现的模块,以支持其他文件类型和转换。
Java Sound API 可以以流,缓冲方式和内存中无缓冲方式处理音频传输。这里使用“流”来概括地指代音频字节的实时处理;它并不是指以特定格式通过 Internet 发送音频的具体,众所周知的情况。换句话说,音频流只是一组连续的音频字节,它们或多或少地以与它们要处理(播放,记录等)相同的速率到达。在所有数据到达之前开始对字节的操作。在流媒体模型中,特别是在音频输入而不是音频输出的情况下,您不一定事先知道声音的持续时间以及声音何时到达。您只需一次处理一个音频数据缓冲区,直到操作停止。在音频输出(播放)的情况下,如果您要播放的声音太大而无法一次装入内存,您还需要缓冲数据。换句话说,您将音频字节以块的形式传送到声音引擎,并负责在适当的时间播放每个样。提供了一些机制,可以很容易地知道每个块中要传递多少数据。
Java Sound API 可以以流,缓冲方式和内存中无缓冲方式处理音频传输。这里使用“流”来概括地指代音频字节的实时处理;它并不是指以特定格式通过 Internet 发送音频的具体,众所周知的情况。换句话说,音频流只是一组连续的音频字节,它们或多或少地以与它们要处理(播放,记录等)相同的速率到达。在所有数据到达之前开始对字节的操作。在流媒体模型中,特别是在音频输入而不是音频输出的情况下,您不一定事先知道声音的持续时间以及声音何时到达。您只需一次处理一个音频数据缓冲区,直到操作停止。在音频输出(播放)的情况下,如果您要播放的声音太大而无法一次装入内存,您还需要缓冲数据。换句话说,您将音频字节以块的形式传送到声音引擎,并负责在适当的时间播放每个样。提供了一些机制,可以很容易地知道每个块中要传递多少数据。
Java Sound API 还允许在仅播放的情况下进行无缓冲传输,假设您已经掌握了所有音频数据,并且它不会太大而无法放入内存中。在这种情况下,应用程序不需要缓冲音频,尽管如果需要,缓冲的实时方法仍然可用。相反,可以将整个声音立即预加载到存储器中以供后续播放。由于所有声音数据都是预先加载的,因此可以立即开始播放 - 例如,只要用户单击“开始”按钮即可。与缓冲模型相比,这可能是一个优点,其中回放必须等待第一个缓冲区填充。此外,内存中的无缓冲模型允许声音轻松循​​环(循环)或设置为数据中的任意位置。
......@@ -16,27 +16,27 @@ Java Sound API 还允许在仅播放的情况下进行无缓冲传输,假设
### 数据格式
数据格式告诉您如何解释“原始”采样音频数据的一系列字节,例如已经从声音文件读取的样本,或者从麦克风输入捕获的样本。例如,您可能需要知道一个样本有多少位(声音最短时刻的表示),同样您可能需要知道声音的采样率(样本应该跟随彼此的速度)。设置播放或捕捉时,您可以指定要捕捉或播放的声音的数据格式。
数据格式告诉您如何解释“原始”采样音频数据的一系列字节,例如已经从声音文件读取的样例,或者从麦克风输入捕获的样例。例如,您可能需要知道一个样例有多少位(声音最短时刻的表示),同样您可能需要知道声音的采样率(样例应该跟随彼此的速度)。设置播放或捕捉时,您可以指定要捕捉或播放的声音的数据格式。
在 Java Sound API 中,数据格式由 [`AudioFormat`](https://docs.oracle.com/javase/8/docs/api/javax/sound/sampled/AudioFormat.html) 对象表示,其中包含以下属性:
* 编码技术,通常是脉冲编码调制(PCM)
* 通道数量(1 为单声道,2 为立体声等)
* 采样率(每通道每秒采样数)
* 每个样的位数(每个通道)
* 每个样的位数(每个通道)
* 帧率
* 帧大小,以字节为单位
* 字节顺序(big-endian 或 little-endian)
PCM 是声音波形的一种编码。 Java Sound API 包括两个使用线性量化幅度的 PCM 编码,以及有符号或无符号整数值。线性量化意味着存储在每个样中的数字与该时刻的原始声压成正比(除了任何失真),并且类似地与在该瞬间随声音振动的扬声器或鼓膜的位移成比例。例如,光盘使用线性 PCM 编码声音。 Mu-law 编码和 a-law 编码是常见的非线性编码,它们提供更加压缩的音频数据版本;这些编码通常用于电话或语音录音。非线性编码使用非线性函数将原始声音的幅度映射到存储值,该非线性函数可以设计为对于安静的声音而不是对响亮的声音给出更大的幅度分辨率。
PCM 是声音波形的一种编码。 Java Sound API 包括两个使用线性量化幅度的 PCM 编码,以及有符号或无符号整数值。线性量化意味着存储在每个样中的数字与该时刻的原始声压成正比(除了任何失真),并且类似地与在该瞬间随声音振动的扬声器或鼓膜的位移成比例。例如,光盘使用线性 PCM 编码声音。 Mu-law 编码和 a-law 编码是常见的非线性编码,它们提供更加压缩的音频数据版本;这些编码通常用于电话或语音录音。非线性编码使用非线性函数将原始声音的幅度映射到存储值,该非线性函数可以设计为对于安静的声音而不是对响亮的声音给出更大的幅度分辨率。
一个帧包含特定时间内所有通道的数据。对于 PCM 编码数据,帧是所有通道中同时采样的集合,对于给定的时刻,没有任何附加信息。在这种情况下,帧速率等于采样速率,帧大小(以字节为单位)是通道数乘以采样大小(以位为单位)除以字节中的位数。
对于其他类型的编码,帧可能包含除样本之外的其他信息,帧速率可能与采样率完全不同。例如,考虑 MP3(MPEG-1 Audio Layer 3)编码,该编码在当前版本的 Java Sound API 中未明确提及,但可由 Java Sound API 的实现或第三方支持服务提供者。在 MP3 中,每帧包含一系列压缩数据,用于一系列样本,而不是每个通道一个样本。由于每个帧封装了一系列样本,因此帧速率低于采样率。该框架还包含一个标题。尽管有标题,但是以字节为单位的帧大小小于相等数量的 PCM 帧的字节大小。 (毕竟,MP3 的目的是比 PCM 数据更紧凑。)对于这样的编码,采样率和样本大小是指编码声音在被传送到数字之前最终将被转换成的 PCM 数据 - 模拟转换器(DAC)。
对于其他类型的编码,帧可能包含除样例之外的其他信息,帧速率可能与采样率完全不同。例如,考虑 MP3(MPEG-1 Audio Layer 3)编码,该编码在当前版本的 Java Sound API 中未明确提及,但可由 Java Sound API 的实现或第三方支持服务提供者。在 MP3 中,每帧包含一系列压缩数据,用于一系列样例,而不是每个通道一个样例。由于每个帧封装了一系列样例,因此帧速率低于采样率。该框架还包含一个标题。尽管有标题,但是以字节为单位的帧大小小于相等数量的 PCM 帧的字节大小。 (毕竟,MP3 的目的是比 PCM 数据更紧凑。)对于这样的编码,采样率和样例大小是指编码声音在被传送到数字之前最终将被转换成的 PCM 数据 - 模拟转换器(DAC)。
### 文件格式
文件格式指定声音文件的结构,不仅包括文件中原始音频数据的格式,还包括可以存储在文件中的其他信息。声音文件有各种标准类型,例如 WAVE(也称为 WAV,通常与 PC 相关),AIFF(通常与 Macintoshes 相关联)和 AU(通常与 UNIX 系统相关联)。不同类型的声音文件具有不同的结构。例如,它们可能在文件的“标题”中具有不同的数据排列。标题包含通常在文件的实际音频样之前的描述性信息,尽管某些文件格式允许描述性和音频数据的连续“块”。标题包括用于在声音文件中存储音频的数据格式的规范。这些类型的声音文件中的任何一种都可以包含各种数据格式(尽管通常在给定文件中只有一种数据格式),并且可以在具有不同文件格式的文件中使用相同的数据格式。
文件格式指定声音文件的结构,不仅包括文件中原始音频数据的格式,还包括可以存储在文件中的其他信息。声音文件有各种标准类型,例如 WAVE(也称为 WAV,通常与 PC 相关),AIFF(通常与 Macintoshes 相关联)和 AU(通常与 UNIX 系统相关联)。不同类型的声音文件具有不同的结构。例如,它们可能在文件的“标题”中具有不同的数据排列。标题包含通常在文件的实际音频样之前的描述性信息,尽管某些文件格式允许描述性和音频数据的连续“块”。标题包括用于在声音文件中存储音频的数据格式的规范。这些类型的声音文件中的任何一种都可以包含各种数据格式(尽管通常在给定文件中只有一种数据格式),并且可以在具有不同文件格式的文件中使用相同的数据格式。
在 Java Sound API 中,文件格式由 [`AudioFileFormat`](https://docs.oracle.com/javase/8/docs/api/javax/sound/sampled/AudioFileFormat.html) 对象表示,其中包含:
......@@ -45,7 +45,7 @@ PCM 是声音波形的一种编码。 Java Sound API 包括两个使用线性量
* 文件中包含的音频数据的长度(以帧为单位)
* 一个 AudioFormat 对象,它指定文件中包含的音频数据的数据格式
[`AudioSystem`](https://docs.oracle.com/javase/8/docs/api/javax/sound/sampled/AudioSystem.html) 类提供了以不同文件格式读取和写入声音以及在不同数据格式之间进行转换的方法。有些方法允许您通过一种称为 [`AudioInputStream`](https://docs.oracle.com/javase/8/docs/api/javax/sound/sampled/AudioInputStream.html) 的流来访问文件的内容。 `AudioInputStream`[`InputStream`](https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html) 类的子类,它封装了一系列可以顺序读取的字节。对于它的超类,`AudioInputStream`类添加了字节'音频数据格式的知识(由`AudioFormat`对象表示)。通过将声音文件作为`AudioInputStream`读取,您可以立即访问样,而无需担心声音文件的结构(其标题,块等)。单个方法调用为您提供有关数据格式和文件类型的所有信息。
[`AudioSystem`](https://docs.oracle.com/javase/8/docs/api/javax/sound/sampled/AudioSystem.html) 类提供了以不同文件格式读取和写入声音以及在不同数据格式之间进行转换的方法。有些方法允许您通过一种称为 [`AudioInputStream`](https://docs.oracle.com/javase/8/docs/api/javax/sound/sampled/AudioInputStream.html) 的流来访问文件的内容。 `AudioInputStream`[`InputStream`](https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html) 类的子类,它封装了一系列可以顺序读取的字节。对于它的超类,`AudioInputStream`类添加了字节'音频数据格式的知识(由`AudioFormat`对象表示)。通过将声音文件作为`AudioInputStream`读取,您可以立即访问样,而无需担心声音文件的结构(其标题,块等)。单个方法调用为您提供有关数据格式和文件类型的所有信息。
## 什么是搅拌机?
......@@ -131,13 +131,13 @@ Java Sound API 中的行与物理混音器中的行之间的一个区别是,
A `Mixer`被定义为具有一个或多个源线和一个或多个目标线。注意,这个定义意味着混音器不需要实际混合数据;它可能只有一个源代码行。 `Mixer` API 旨在涵盖各种设备,但典型案例支持混合。
`Mixer`接口支持同步;也就是说,您可以指定将两个或多个混音器的行视为同步组。然后,您可以通过向组中的任何行发送单个消息来启动,停止或关闭所有这些数据行,而不必单独控制每一行。使用支持此功能的混音器,您可以获得线之间的样精确同步。
`Mixer`接口支持同步;也就是说,您可以指定将两个或多个混音器的行视为同步组。然后,您可以通过向组中的任何行发送单个消息来启动,停止或关闭所有这些数据行,而不必单独控制每一行。使用支持此功能的混音器,您可以获得线之间的样精确同步。
通用`Line`接口不提供启动和停止播放或录制的方法。为此,您需要一条数据线。 [`DataLine`](https://docs.oracle.com/javase/8/docs/api/javax/sound/sampled/DataLine.html) 接口提供以下与`Line`相关的其他媒体相关功能:
* 音频格式 - 每条数据线都有一个与其数据流相关的音频格式。
* 媒体位置 - 数据行可以报告其在媒体中的当前位置,以样本帧表示。这表示自打开以来数据线捕获或呈现的样本帧数。
* 媒体位置 - 数据行可以报告其在媒体中的当前位置,以样例帧表示。这表示自打开以来数据线捕获或呈现的样例帧数。
* 缓冲区大小 - 这是数据行内部缓冲区的大小(以字节为单位)。对于源数据行,内部缓冲区是可以写入数据的内部缓冲区,对于目标数据线,它是可以从中读取数据的缓冲区。
......
......@@ -69,7 +69,7 @@ int write(byte[] b, int offset, int length)
数组的偏移量以字节表示,数组的长度也是如此。
线路开始尽快向其混音器发送数据。当混音器本身将数据传送到目标时,`SourceDataLine`会生成`START`事件。 (在 Java Sound API 的典型实现中,源线将数据传送到混音器的时刻与混音器将数据传送到目标的时刻之间的延迟可以忽略不计,即远远少于一个时间。样。)此`START`事件被发送到线路的监听器,如下面[监视线路状态](#113711)中所述。该行现在被认为是活动的,因此`DataLine``isActive`方法将返回`true`。请注意,所有这些只在缓冲区包含要播放的数据时发生,而不一定在调用 start 方法时发生。如果在新的`SourceDataLine`上调用`start`但从未将数据写入缓冲区,则该行永远不会处于活动状态,并且永远不会发送`START`事件。 (但是,在这种情况下,`DataLine``isRunning`方法将返回`true`。)
线路开始尽快向其混音器发送数据。当混音器本身将数据传送到目标时,`SourceDataLine`会生成`START`事件。 (在 Java Sound API 的典型实现中,源线将数据传送到混音器的时刻与混音器将数据传送到目标的时刻之间的延迟可以忽略不计,即远远少于一个时间。样。)此`START`事件被发送到线路的监听器,如下面[监视线路状态](#113711)中所述。该行现在被认为是活动的,因此`DataLine``isActive`方法将返回`true`。请注意,所有这些只在缓冲区包含要播放的数据时发生,而不一定在调用 start 方法时发生。如果在新的`SourceDataLine`上调用`start`但从未将数据写入缓冲区,则该行永远不会处于活动状态,并且永远不会发送`START`事件。 (但是,在这种情况下,`DataLine``isRunning`方法将返回`true`。)
那么你怎么知道要写入缓冲区的数据量,以及何时发送第二批数据?幸运的是,您不需要第二次调用 write 来与第一个缓冲区的末尾同步!相反,您可以利用`write`方法的阻塞行为:
......@@ -95,7 +95,7 @@ while (total < totalToRead && !stopped)}
如果你不想阻止`write`方法,你可以先调用`available`方法(在循环内)找出可以不阻塞地写入多少字节,然后将`numBytesToRead`变量限制为数字,在从流中读取之前。但是,在给出的示例中,阻塞无关紧要,因为在循环内调用 write 方法,直到在最后一个循环迭代中写入最后一个缓冲区才会完成。无论您是否使用阻塞技术,您可能希望在与应用程序其余部分不同的线程中调用此回放循环,以便在播放长音时您的程序不会冻结。在循环的每次迭代中,您可以测试用户是否已请求停止播放。这样的请求需要将上面代码中使用的`stopped`布尔值设置为`true`
由于`write`在所有数据播放完毕之前返回,您如何知道播放何时实际完成?一种方法是在写入最后一个缓冲区的数据后调用`DataLine``drain`方法。此方法将阻止,直到播放完所有数据。当控制返回到您的程序时,您可以根据需要释放该行,而不必担心过早地切断任何音频样的播放:
由于`write`在所有数据播放完毕之前返回,您如何知道播放何时实际完成?一种方法是在写入最后一个缓冲区的数据后调用`DataLine``drain`方法。此方法将阻止,直到播放完所有数据。当控制返回到您的程序时,您可以根据需要释放该行,而不必担心过早地切断任何音频样的播放:
```
line.write(b, offset, numBytesToWrite);
......@@ -137,7 +137,7 @@ boolean isSynchronizationSupported(Line[] lines, boolean maintainSync)
```
第一个参数指定一组特定数据行,第二个参数指示必须保持同步的准确性。如果第二个参数是`true`,则查询询问混频器是否能够始终保持样精确度以控制指定行;否则,仅在启动和停止操作期间需要精确同步,而不是在整个回放期间。
第一个参数指定一组特定数据行,第二个参数指示必须保持同步的准确性。如果第二个参数是`true`,则查询询问混频器是否能够始终保持样精确度以控制指定行;否则,仅在启动和停止操作期间需要精确同步,而不是在整个回放期间。
## 处理传出音频
......
......@@ -2,7 +2,7 @@
> 原文: [https://docs.oracle.com/javase/tutorial/sound/controls.html](https://docs.oracle.com/javase/tutorial/sound/controls.html)
前面的部分讨论了如何播放或捕获音频样本。隐含的目标是尽可能忠实地传送样本,而不进行修改(除了可能将样本与来自其他音频线的样本混合)。但是,有时您希望能够修改信号。用户可能希望它听起来更响亮,更安静,更饱满,更具混响,音高更高或更低,等等。本页讨论了提供这些信号处理的 Java Sound API 功能。
前面的部分讨论了如何播放或捕获音频样例。隐含的目标是尽可能忠实地传送样例,而不进行修改(除了可能将样例与来自其他音频线的样例混合)。但是,有时您希望能够修改信号。用户可能希望它听起来更响亮,更安静,更饱满,更具混响,音高更高或更低,等等。本页讨论了提供这些信号处理的 Java Sound API 功能。
有两种方法可以应用信号处理:
......
......@@ -11,7 +11,7 @@
* 可以从文件读取或写入文件的音频数据流由`AudioInputStream`对象表示。 (`AudioInputStream`继承自`java.io.InputStream`。)
* The format of this audio data is represented by an `AudioFormat` object.
此格式指定音频样本本身的排列方式,但不指定可能存储的文件结构。换句话说,`AudioFormat`描述“原始”音频数据,例如系统从麦克风输入捕获程序或从声音文件解析后,可能会将程序交给你。 `AudioFormat`包括诸如编码,字节顺序,信道数,采样率和每个样本的比特数之类的信息。
此格式指定音频样例本身的排列方式,但不指定可能存储的文件结构。换句话说,`AudioFormat`描述“原始”音频数据,例如系统从麦克风输入捕获程序或从声音文件解析后,可能会将程序交给你。 `AudioFormat`包括诸如编码,字节顺序,信道数,采样率和每个样例的比特数之类的信息。
* 声音文件有几种众所周知的标准格式,例如 WAV,AIFF 或 AU。不同类型的声音文件具有不同的结构,用于存储音频数据以及存储关于音频数据的描述性信息。声音文件格式由`AudioFileFormat`对象在 Java Sound API 中表示。 `AudioFileFormat`包括`AudioFormat`对象,用于描述存储在文件中的音频数据的格式,还包括有关文件类型和文件中数据长度的信息。
* `AudioSystem`类提供了以下方法:(1)将来自`AudioInputStream`的音频数据流存储到特定类型的音频文件中(换句话说,写入文件),(2)提取来自音频文件的音频字节流(`AudioInputStream`)(换句话说,读取文件),以及(3)将音频数据从一种数据格式转换为另一种数据格式。该页面分为三个部分,解释了这三种活动。
......@@ -40,7 +40,7 @@ Java Sound API 的实现不一定提供用于以不同数据和文件格式读
```
如上所述,返回的`AudioFileFormat`对象告诉您文件类型,文件中数据的长度,编码,字节顺序,通道数,采样率以及每个样的位数。
如上所述,返回的`AudioFileFormat`对象告诉您文件类型,文件中数据的长度,编码,字节顺序,通道数,采样率以及每个样的位数。
第二种类型的文件读取功能由这些`AudioSystem`方法给出
......@@ -100,11 +100,11 @@ try {
```
我们来看看上面的代码示例中发生了什么。首先,外部 try 子句通过调用`AudioSystem.getAudioInputStream(File)`方法实例化`AudioInputStream`对象。此方法透明地执行确定指定文件是否实际上是 Java Sound API 支持的类型的声音文件所需的所有测试。如果正在检查的文件(本例中为`fileIn`)不是声音文件,或者是某种不支持类型的声音文件,则抛出`UnsupportedAudioFileException`异常。这种行为很方便,因为应用程序员不需要考虑测试文件属性,也不需要遵守任何文件命名约定。相反,`getAudioInputStream`方法负责验证输入文件所需的所有低级解析和验证。 外部`try`子句然后创建一个任意固定长度的字节数组`audioBytes`。我们确保其以字节为单位的长度等于帧的整数,这样我们最终不会只读取帧的一部分,更糟糕的是,只读取部分样。此字节数组将用作缓冲区,以便在从流中读取时临时保存一大块音频数据。如果我们知道我们只读取非常短的声音文件,我们可以通过从`AudioInputStream's getFrameLength`方法返回的帧长度中导出长度(以字节为单位)来使该数组与文件中的数据长度相同。 (实际上,我们可能只是使用`Clip`对象。)但是为了避免在一般情况下耗尽内存,我们反而以块的形式读取文件,一次读取一个缓冲区。
我们来看看上面的代码示例中发生了什么。首先,外部 try 子句通过调用`AudioSystem.getAudioInputStream(File)`方法实例化`AudioInputStream`对象。此方法透明地执行确定指定文件是否实际上是 Java Sound API 支持的类型的声音文件所需的所有测试。如果正在检查的文件(本例中为`fileIn`)不是声音文件,或者是某种不支持类型的声音文件,则抛出`UnsupportedAudioFileException`异常。这种行为很方便,因为应用程序员不需要考虑测试文件属性,也不需要遵守任何文件命名约定。相反,`getAudioInputStream`方法负责验证输入文件所需的所有低级解析和验证。 外部`try`子句然后创建一个任意固定长度的字节数组`audioBytes`。我们确保其以字节为单位的长度等于帧的整数,这样我们最终不会只读取帧的一部分,更糟糕的是,只读取部分样。此字节数组将用作缓冲区,以便在从流中读取时临时保存一大块音频数据。如果我们知道我们只读取非常短的声音文件,我们可以通过从`AudioInputStream's getFrameLength`方法返回的帧长度中导出长度(以字节为单位)来使该数组与文件中的数据长度相同。 (实际上,我们可能只是使用`Clip`对象。)但是为了避免在一般情况下耗尽内存,我们反而以块的形式读取文件,一次读取一个缓冲区。
内部`try`子句包含一个`while`循环,我们将`AudioInputStream`中的音频数据读入字节数组。您应该在此循环中添加代码,以适合您的程序需要的任何方式处理此数组中的音频数据。如果您对数据应用某种信号处理,则可能需要进一步查询`AudioInputStream's AudioFormat`,以了解每个样的位数等等。
内部`try`子句包含一个`while`循环,我们将`AudioInputStream`中的音频数据读入字节数组。您应该在此循环中添加代码,以适合您的程序需要的任何方式处理此数组中的音频数据。如果您对数据应用某种信号处理,则可能需要进一步查询`AudioInputStream's AudioFormat`,以了解每个样的位数等等。
注意方法`AudioInputStream.read(byte[])`返回 _ 字节 _ 读取的数量 - 而不是样或帧的数量。当没有更多数据要读取时,此方法返回-1。在检测到这种情况后,我们从`while`循环中断开。
注意方法`AudioInputStream.read(byte[])`返回 _ 字节 _ 读取的数量 - 而不是样或帧的数量。当没有更多数据要读取时,此方法返回-1。在检测到这种情况后,我们从`while`循环中断开。
## 写声音文件
......@@ -158,7 +158,7 @@ if (AudioSystem.isFileTypeSupported(fileType,
## 转换文件和数据格式
回想一下[什么是格式化音频数据?](sampled-overview.html#formatted) ,Java Sound API 区分音频 _ 文件 _ 格式和音频 _ 数据 _ 格式。这两者或多或少是独立的。粗略地说,数据格式是指计算机表示每个原始数据点(样本)的方式,而文件格式是指存储在磁盘上的声音文件的组织。每种声音文件格式都有一个特定的结构,例如,它定义了存储在文件头部的信息。在某些情况下,除了实际的“原始”音频样本之外,文件格式还包括包含某种形式的元数据的结构。本页的其余部分将介绍 Java Sound API 的方法,这些方法支持各种文件格式和数据格式转换。
回想一下[什么是格式化音频数据?](sampled-overview.html#formatted) ,Java Sound API 区分音频 _ 文件 _ 格式和音频 _ 数据 _ 格式。这两者或多或少是独立的。粗略地说,数据格式是指计算机表示每个原始数据点(样例)的方式,而文件格式是指存储在磁盘上的声音文件的组织。每种声音文件格式都有一个特定的结构,例如,它定义了存储在文件头部的信息。在某些情况下,除了实际的“原始”音频样例之外,文件格式还包括包含某种形式的元数据的结构。本页的其余部分将介绍 Java Sound API 的方法,这些方法支持各种文件格式和数据格式转换。
## 从一种文件格式转换为另一种文件格式
......@@ -230,15 +230,15 @@ public void ConvertFileToAIFF(String inputPath,
* `AudioSystem.isFileTypeSupported`:表示系统是否可以写入包含来自指定`AudioInputStream.`的音频数据的指定类型的文件。在我们的示例中,如果指定的音频输入文件可以是,则此方法返回`true`转换为 AIFF 音频文件格式。如果不支持`AudioFileFormat.Type.AIFF``ConvertFileToAIFF`会发出无法转换输入文件的警告,然后返回。
* `AudioSystem.write`:此处用于将音频数据从 AudioInputStream `inFileAIS`写入输出文件`outFile`
这些方法中的第二种`isFileTypeSupported`有助于在写入之前确定特定输入声音文件是否可以转换为特定的输出声音文件类型。在下一节中,我们将看到如何通过对`ConvertFileToAIFF`例程的一些修改,我们可以转换音频数据格式以及声音文件类型。
这些方法中的第二种`isFileTypeSupported`有助于在写入之前确定特定输入声音文件是否可以转换为特定的输出声音文件类型。在下一节中,我们将看到如何通过对`ConvertFileToAIFF`例程的一些修改,我们可以转换音频数据格式以及声音文件类型。
## 在不同数据格式之间转换音频
上一节介绍了如何使用 Java Sound API 将文件从一种 _ 文件 _ 格式(即一种声音文件)转换为另一种格式。本节探讨了一些启用音频 _ 数据 _ 格式转换的方法。
在上一节中,我们从任意类型的文件中读取数据,并将其保存在 AIFF 文件中。请注意,虽然我们更改了用于存储数据的文件类型,但我们没有更改音频数据本身的格式。 (最常见的音频文件类型,包括 AIFF,可以包含各种格式的音频数据。)因此,如果原始文件包含 CD 质量的音频数据(16 位样大小,44.1-kHz 采样率和两个通道),那么我们的输出 AIFF 文件。
在上一节中,我们从任意类型的文件中读取数据,并将其保存在 AIFF 文件中。请注意,虽然我们更改了用于存储数据的文件类型,但我们没有更改音频数据本身的格式。 (最常见的音频文件类型,包括 AIFF,可以包含各种格式的音频数据。)因此,如果原始文件包含 CD 质量的音频数据(16 位样大小,44.1-kHz 采样率和两个通道),那么我们的输出 AIFF 文件。
现在假设我们要指定输出文件的 _ 数据 _ 格式,以及文件类型。例如,我们可能正在保存许多长文件以供 Internet 使用,并且担心我们的文件所需的磁盘空间和下载时间。我们可能会选择创建包含较低分辨率数据的较小 AIFF 文件,例如,具有 8 位样大小,8 kHz 采样率和单个通道的数据。
现在假设我们要指定输出文件的 _ 数据 _ 格式,以及文件类型。例如,我们可能正在保存许多长文件以供 Internet 使用,并且担心我们的文件所需的磁盘空间和下载时间。我们可能会选择创建包含较低分辨率数据的较小 AIFF 文件,例如,具有 8 位样大小,8 kHz 采样率和单个通道的数据。
在不考虑前面那么多的编码细节的情况下,让我们探讨一些用于数据格式转换的方法,并考虑我们需要对`ConvertFileToAIFF`函数进行修改以实现新目标。
......@@ -289,7 +289,7 @@ AudioFormat outDataFormat = new AudioFormat((float) 8000.0,
```
由于上面的`AudioFormat`构造器正在描述具有 8 位样本的格式,因此构造器的最后一个参数(指定样本是大端还是小端)是无关紧要的。 (如果样本大小大于单个字节,则大端与小端只是一个问题。)
由于上面的`AudioFormat`构造器正在描述具有 8 位样例的格式,因此构造器的最后一个参数(指定样例是大端还是小端)是无关紧要的。 (如果样例大小大于单个字节,则大端与小端只是一个问题。)
以下示例显示了如何使用这个新的`AudioFormat`转换我们从输入文件创建的`AudioInputStream``inFileAIS`
......
......@@ -145,7 +145,7 @@ boolean remapInstrument(Instrument from, Instrument to)
### 访问 Soundbank 资源
有些合成器在声音库中存储除乐器之外的其他信息。例如,波表合成器存储一个或多个乐器可以访问的音频样本。由于样本可能由多个乐器共享,因此它们可以独立于任何乐器存储在音库中。 `Soundbank`接口和`Instrument`类都提供方法调用`getSoundbankResources`,它返回`SoundbankResource`对象的列表。这些对象的细节特定于设计音库的合成器。在波表合成的情况下,资源可以是封装一系列音频样本的对象,从一个录音片段中获取。使用其他合成技术的合成器可能会在合成器的`SoundbankResources`数组中存储其他类型的对象。
有些合成器在声音库中存储除乐器之外的其他信息。例如,波表合成器存储一个或多个乐器可以访问的音频样例。由于样例可能由多个乐器共享,因此它们可以独立于任何乐器存储在音库中。 `Soundbank`接口和`Instrument`类都提供方法调用`getSoundbankResources`,它返回`SoundbankResource`对象的列表。这些对象的细节特定于设计音库的合成器。在波表合成的情况下,资源可以是封装一系列音频样例的对象,从一个录音片段中获取。使用其他合成技术的合成器可能会在合成器的`SoundbankResources`数组中存储其他类型的对象。
## 查询合成器的功能和当前状态
......
......@@ -120,7 +120,7 @@ abstract Soundbank getSoundbank(java.net.URL url)
```
`SoundbankReader`的具体子类将与特定提供者定义的`SoundBank``Instrument``Synthesizer`实现协同工作,以允许系统将`SoundBank`从文件加载到特定实例`Synthesizer` ]班。合成技术可能与`Synthesizer`相差甚远,因此,存储在`Instrument``SoundBank`中的数据可为`Synthesizer`的合成过程提供控制或规格数据。形式。一种合成技术可能只需要几个字节的参数数据;另一种可能基于广泛的声音样`SoundBank`中存在的资源将取决于它们加载到的`Synthesizer`的性质,因此`SoundbankReader`子类的`getSoundbank`方法的实现可以获得特定类型的`getSoundbank`方法的知识。 COD14]。此外,`SoundbankReader`的特定子类理解用于存储`SoundBank`数据的特定文件格式。该文件格式可能是供应商特定的和专有的。
`SoundbankReader`的具体子类将与特定提供者定义的`SoundBank``Instrument``Synthesizer`实现协同工作,以允许系统将`SoundBank`从文件加载到特定实例`Synthesizer` ]班。合成技术可能与`Synthesizer`相差甚远,因此,存储在`Instrument``SoundBank`中的数据可为`Synthesizer`的合成过程提供控制或规格数据。形式。一种合成技术可能只需要几个字节的参数数据;另一种可能基于广泛的声音样`SoundBank`中存在的资源将取决于它们加载到的`Synthesizer`的性质,因此`SoundbankReader`子类的`getSoundbank`方法的实现可以获得特定类型的`getSoundbank`方法的知识。 COD14]。此外,`SoundbankReader`的特定子类理解用于存储`SoundBank`数据的特定文件格式。该文件格式可能是供应商特定的和专有的。
`SoundBank`只是一个接口,对`SoundBank`对象的内容只有很弱的约束。对象必须支持实现此接口的方法(`getResources``getInstruments``getVendor``getName`等)对对象包含的数据施加了宽松的要求。例如,`getResources``getInstruments`可以返回空数组。子类`SoundBank`对象的实际内容,特别是其仪器及其非仪器资源,由服务提供商定义。因此,解析音库文件的机制完全取决于特定类型的音库文件的规范。
......
......@@ -14,9 +14,9 @@
6. [下载示例代码](#step6)
7. [修改`build.xml`文件](#step7)
8. [修改教程属性文件](#step8)
9. [编译并打包样](#step9)
9. [编译并打包样](#step9)
10. [创建数据库,表格和填充表格](#step10)
11. [运行样](#step11)
11. [运行样](#step11)
在您的计算机上安装最新版本的 Java SE SDK。
......@@ -55,7 +55,7 @@ JDBC 驱动程序有许多可能的实现。这些实现分类如下:
确保 Apache Ant 可执行文件位于`PATH`环境变量中,以便您可以从任何目录运行它。
如果您的 DBMS 是 Java DB,[使用 SQLXML 对象](sqlxml.html)中描述的样`RSSFeedsTable.java`需要 Apache Xalan。该示例使用 Apache Xalan-Java。转到以下链接下载它:
如果您的 DBMS 是 Java DB,[使用 SQLXML 对象](sqlxml.html)中描述的样`RSSFeedsTable.java`需要 Apache Xalan。该示例使用 Apache Xalan-Java。转到以下链接下载它:
`[http://xml.apache.org/xalan-j/](http://xml.apache.org/xalan-j/)`
......@@ -106,7 +106,7 @@ JDBC 驱动程序有许多可能的实现。这些实现分类如下:
创建一个目录以包含该示例的所有文件。这些步骤将此目录称为 `_&lt; JDBC 教程目录&gt;_`。将 `[JDBCTutorial.zip](examples/zipfiles/JDBCTutorial.zip)`的内容解压缩到 `_&lt; JDBC 教程目录&gt;_`
`build.xml`文件是 Apache Ant 用于编译和执行 JDBC 示例的构建文件。文件`properties/javadb-build-properties.xml``properties/mysql-build-properties.xml`分别包含 Java DB 和 MySQL 所需的其他 Apache Ant 属性。文件`properties/javadb-sample-properties.xml``properties/mysql-sample-properties.xml`包含样所需的属性。
`build.xml`文件是 Apache Ant 用于编译和执行 JDBC 示例的构建文件。文件`properties/javadb-build-properties.xml``properties/mysql-build-properties.xml`分别包含 Java DB 和 MySQL 所需的其他 Apache Ant 属性。文件`properties/javadb-sample-properties.xml``properties/mysql-sample-properties.xml`包含样所需的属性。
修改这些 XML 文件,如下所示:
......@@ -197,7 +197,7 @@ ant setup
```
**注意**:每次运行示例中的一个 Java 类之前,都应该运行命令`ant setup`。其中许多样本都希望样本数据库表的内容中包含特定数据。
**注意**:每次运行示例中的一个 Java 类之前,都应该运行命令`ant setup`。其中许多样例都希望样例数据库表的内容中包含特定数据。
`build.xml`文件中的每个目标对应于 JDBC 示例中的 Java 类或 SQL 脚本。下表列出了`build.xml`文件中的目标,每个目标执行的类或脚本,以及每个目标所需的其他类或文件:
......
......@@ -247,7 +247,7 @@ jdbcRs.deleteRow();
```
`[JdbcRowSetSample](gettingstarted.html)`执行以下操作:
`[JdbcRowSetSample](gettingstarted.html)`执行以下操作:
* 创建一个新的`JdbcRowSet`对象,该对象使用`ResultSet`对象初始化,该对象是由执行检索`COFFEES`表中的所有行的查询生成的
* 将光标移动到`COFFEES`表的第三行并更新该行中的`PRICE`
......
......@@ -115,7 +115,7 @@ XML 文档包含分层结构中的元素和子元素。以下是描述`WebRowSet
元素标签用信号通知元素的开头和结尾。例如,`&lt;properties&gt;`标记表示属性元素的开头,`&lt;/properties&gt;`标记表示其结束。 `&lt;map/&gt;`标签是说明地图子元素(属性元素中的一个子元素)尚未赋值的简写方式。以下示例 XML 文档使用间距和缩进来使其更易于阅读,但这些不在实际的 XML 文档中使用,其中间距并不意味着什么。
接下来的三节将向您展示在样 [`WebRowSetSample.java`](gettingstarted.html) 中创建的`WebRowSet` `priceList`对象的三个主要元素。
接下来的三节将向您展示在样 [`WebRowSetSample.java`](gettingstarted.html) 中创建的`WebRowSet` `priceList`对象的三个主要元素。
`priceList`对象上调用方法`writeXml`将生成描述`priceList`的 XML 文档。此 XML 文档的属性部分如下所示:
......
......@@ -126,13 +126,13 @@ xmlVar.free();
```
MySQL 和 Java DB 及其各自的 JDBC 驱动程序不完全支持`SQLXML` JDBC 数据类型,如本节所述。但是,样 `[RSSFeedsTable](gettingstarted.html)`演示了如何使用 MySQL 和 Java DB 处理 XML 数据。
MySQL 和 Java DB 及其各自的 JDBC 驱动程序不完全支持`SQLXML` JDBC 数据类型,如本节所述。但是,样 `[RSSFeedsTable](gettingstarted.html)`演示了如何使用 MySQL 和 Java DB 处理 XML 数据。
The Coffee Break 的所有者关注来自各种网站的多个 RSS 源,其中包括餐馆和饮料行业的新闻。 RSS(Really Simple Syndication 或 Rich Site Summary)源是一个 XML 文档,其中包含一系列文章和相关元数据,例如每篇文章的发布日期和作者。所有者希望将这些 RSS 提要存储到数据库表中,包括来自 The Coffee Break 博客的 RSS 提要。
文件 `[rss-the-coffee-break-blog.xml](gettingstarted.html)`是来自 The Coffee Break 博客的示例 RSS 源。
`RSSFeedsTable`将 RSS 源存储在表`RSS_FEEDS`中,该表使用以下命令创建:
`RSSFeedsTable`将 RSS 源存储在表`RSS_FEEDS`中,该表使用以下命令创建:
```
create table RSS_FEEDS
......@@ -187,7 +187,7 @@ insertRow.executeUpdate();
**注**:有关在 Java DB 中使用 XML 数据的更多信息,请参阅 [_Java DB 开发人员指南 _](http://docs.oracle.com/javadb/index_jdk8.html) 中的“XML 数据类型和运算符”部分。
`RSSFeedsTable`将 RSS 源存储在表`RSS_FEEDS`中,该表使用以下命令创建:
`RSSFeedsTable`将 RSS 源存储在表`RSS_FEEDS`中,该表使用以下命令创建:
```
create table RSS_FEEDS
......
......@@ -106,7 +106,7 @@ public static void viewTable(Connection con, Proxy proxy)
```
[`DatalinkSample`](gettingstarted.html) 将 Oracle URL [http://www.oracle.com](http://www.oracle.com) 存储在表`DATA_REPOSITORY`中。之后,它显示`DATA_REPOSITORY`中存储的 URL 引用的所有文档的内容,其中包括 Oracle 主页 [http://www.oracle.com](http://www.oracle.com)
[`DatalinkSample`](gettingstarted.html) 将 Oracle URL [http://www.oracle.com](http://www.oracle.com) 存储在表`DATA_REPOSITORY`中。之后,它显示`DATA_REPOSITORY`中存储的 URL 引用的所有文档的内容,其中包括 Oracle 主页 [http://www.oracle.com](http://www.oracle.com)
该示例使用以下语句从结果集中检索 URL 作为`java.net.URL`对象:
......
......@@ -8,9 +8,9 @@
该示例包含五个文本字段,这些字段对应于`COFFEES`表中的每个列。它还包含三个按钮:
* **向表**添加行:根据在文本字段中输入的数据向样表中添加一行。
* **更新数据库**:根据样表中的数据更新表`COFFEES`
* **放弃更改**:检索`COFFEES`表的内容,替换样表中的现有数据。
* **向表**添加行:根据在文本字段中输入的数据向样表中添加一行。
* **更新数据库**:根据样表中的数据更新表`COFFEES`
* **放弃更改**:检索`COFFEES`表的内容,替换样表中的现有数据。
此示例(需要`CoffeesTableModel`)演示了将 JDBC 与 Swing API 集成的以下一般步骤:
......@@ -19,7 +19,7 @@
3. [摆出 Swing 组件](#laying_out_swing)
4. [为示例中的按钮添加监听器](#adding_listeners)
`TableModel`接口使 Java Swing 应用程序能够管理`JTable`对象中的数据。样 [`CoffeesTableModel.java`](gettingstarted.html) 实现此接口。它指定`JTable`对象应如何从`RowSet`对象检索数据并将其显示在表中。
`TableModel`接口使 Java Swing 应用程序能够管理`JTable`对象中的数据。样 [`CoffeesTableModel.java`](gettingstarted.html) 实现此接口。它指定`JTable`对象应如何从`RowSet`对象检索数据并将其显示在表中。
**注意**:虽然此示例显示 Swing 应用程序中`COFFEES`表的内容,但类`CoffeesTableModel`应适用于任何 SQL 表,前提是其数据可以用`String`对象表示。 (但是,必须为其他 SQL 表修改允许用户向`COFFEES`添加行的字段,这些字段在`CoffeesFrame`类中指定)。
......
......@@ -6,7 +6,7 @@
* * *
**注 -**[JAXP 下载区](http://jaxp.java.net/downloads.html)下载并安装了 JAXP API 的源代码后,本示例的示例程序可在 _install-dir 目录中找到 _ `/ jaxp-1_4_2-` _ 释放日期 _ `/样品/ sax` 。与其交互的 XML 文件可在 _install-dir_ `/ jaxp-1_4_2-` _ 发布日期 _ `/样本/数据`中找到。
**注 -**[JAXP 下载区](http://jaxp.java.net/downloads.html)下载并安装了 JAXP API 的源代码后,本示例的示例程序可在 _install-dir 目录中找到 _ `/ jaxp-1_4_2-` _ 释放日期 _ `/样例/ sax` 。与其交互的 XML 文件可在 _install-dir_ `/ jaxp-1_4_2-` _ 发布日期 _ `/样例/数据`中找到。
* * *
......@@ -364,13 +364,13 @@ private static class MyErrorHandler implements ErrorHandler {
* `SAXLocalNameCount.java` 文件位于 _install-dir_ `/ jaxp-1_4_2-` _ 发布日期 _ `/ samples / sax` 。
* `SAXLocalNameCount` 与之交互的 XML 文件可在 _install-dir_ `/ jaxp-1_4_2-` _ 发布日期 _ `/样中找到/ data` 。
* `SAXLocalNameCount` 与之交互的 XML 文件可在 _install-dir_ `/ jaxp-1_4_2-` _ 发布日期 _ `/样中找到/ data` 。
以下步骤说明如何在未经验证的情况下运行 SAX 解析器示例。
### 在没有验证的情况下运行 `SAXLocalNameCount` 示例
1. **导航至``目录。** `%cd _install-dir_ `/ jaxp-1_4_2-` _ 释放日期 _ `/样品``
1. **导航至``目录。** `%cd _install-dir_ `/ jaxp-1_4_2-` _ 释放日期 _ `/样例``
2. **编译示例类。** `% javac sax/*`
3. **Run the `SAXLocalNameCount` program on an XML file.**
......
......@@ -258,9 +258,9 @@ XML 规范建议应该由于以下原因生成警告:
## 尝试 DTD 验证错误
如上所述,这些示例重用 `SAXLocalNameCount` 程序。您可以在[运行没有验证的 SAX 分析器示例](parsing.html#gcnrx)中找到您将找到样及其相关文件的位置。
如上所述,这些示例重用 `SAXLocalNameCount` 程序。您可以在[运行没有验证的 SAX 分析器示例](parsing.html#gcnrx)中找到您将找到样及其相关文件的位置。
1. **如果您还没有这样做,请导航至`样本`目录。** `%cd _install-dir_ `/ jaxp-1_4_2-` _ 释放日期 _ `/样本``
1. **如果您还没有这样做,请导航至`样例`目录。** `%cd _install-dir_ `/ jaxp-1_4_2-` _ 释放日期 _ `/样例``
2. **如果您还没有这样做,请编译示例类。** `% javac sax/*`
3. **Open the file `data/rich_iii.xml` in a text editor.**
......@@ -376,9 +376,9 @@ XML 规范建议应该由于以下原因生成警告:
上一个练习演示了使用 `SAXLocalNameCount` 来针对 DTD 验证 XML 文件。在本练习中,您将使用 `SAXLocalNameCount` 来针对标准 XML 架构定义和自定义架构源文件验证不同的 XML 文件。同样,这种类型的验证将通过修改 XML 文件和模式来破解解析过程来演示,以便解析器抛出错误。
如上所述,这些示例重用 `SAXLocalNameCount` 程序。您可以在[运行没有验证的 SAX 分析器示例](parsing.html#gcnrx)中找到您将找到样及其相关文件的位置。
如上所述,这些示例重用 `SAXLocalNameCount` 程序。您可以在[运行没有验证的 SAX 分析器示例](parsing.html#gcnrx)中找到您将找到样及其相关文件的位置。
1. **如果您还没有这样做,请导航至`样本`目录。** `%cd _install-dir_ `/ jaxp-1_4_2-` _ 释放日期 _ `/样本``
1. **如果您还没有这样做,请导航至`样例`目录。** `%cd _install-dir_ `/ jaxp-1_4_2-` _ 释放日期 _ `/样例``
2. **如果您还没有这样做,请编译示例类。** `% javac sax/*`
3. **Open the file `data/personal-schema.xml` in a text editor.**
......
......@@ -716,11 +716,11 @@ public String getText(Node node) {
创建新节点时要记住的重要一点是,在创建元素节点时,您指定的唯一数据是名称。实际上,该节点为您提供挂钩的挂钩。通过添加到子节点列表中挂起项目。例如,您可以添加文本节点, `CDATA` 节点或属性节点。在构建时,请记住您在本教程中看到的结构。请记住:层次结构中的每个节点都非常简单,只包含一个数据元素。
## 运行 `DOMEcho` 样
## 运行 `DOMEcho` 样
要运行 `DOMEcho`,请按照以下步骤操作。
要运行 `DOMEcho`,请按照以下步骤操作。
1. **导航至`样本`目录。** `%cd _install-dir_ `/ jaxp-1_4_2-` _ 释放日期 _ `/样品`。`
1. **导航至`样例`目录。** `%cd _install-dir_ `/ jaxp-1_4_2-` _ 释放日期 _ `/样例`。`
2. **编译示例类。** `% javac dom/*`
3. **Run the `DOMEcho` program on an XML file.**
......
......@@ -206,7 +206,7 @@ factory.setAttribute(JAXP_SCHEMA_SOURCE, schemas);
要使用模式验证运行 `DOMEcho` 示例,请按照以下步骤操作。
1. **导航至`样本`目录。** `%cd _install-dir_ `/ jaxp-1_4_2-` _ 释放日期 _ `/样品`。`
1. **导航至`样例`目录。** `%cd _install-dir_ `/ jaxp-1_4_2-` _ 释放日期 _ `/样例`。`
2. **使用刚刚设置的类路径编译示例类。** `% javac dom/*`
3. **Run the `DOMEcho` program on an XML file, specifying schema validation.**
......@@ -214,7 +214,7 @@ factory.setAttribute(JAXP_SCHEMA_SOURCE, schemas);
`% java dom/DOMEcho -xsd data/personal-schema.xml`
正如您在[配置工厂](readingXML.html#geswk)中看到的, `-xsd` 选项告诉 `DOMEcho` 对`个人模式中定义的 XML 模式执行验证.xml` 文件。在这种情况下,模式是文件 `personal.xsd` ,它也位于`样/数据`目录中。
正如您在[配置工厂](readingXML.html#geswk)中看到的, `-xsd` 选项告诉 `DOMEcho` 对`个人模式中定义的 XML 模式执行验证.xml` 文件。在这种情况下,模式是文件 `personal.xsd` ,它也位于`样/数据`目录中。
4. **Open `personal-schema.xml` in a text editor and delete the schema declaration.**
......
......@@ -14,7 +14,7 @@
**Note:** 
本节中讨论的代码位于文件 `TransformationApp01.java` 中。 [`Download the XSLT examlles`](../examples/xslt_samples.zip) 并将它们解压缩到 _install-dir_ `/ jaxp-1_4_2-` _ 发布日期 _ `/样` ] 目录。
本节中讨论的代码位于文件 `TransformationApp01.java` 中。 [`Download the XSLT examlles`](../examples/xslt_samples.zip) 并将它们解压缩到 _install-dir_ `/ jaxp-1_4_2-` _ 发布日期 _ `/样` ] 目录。
* * *
......@@ -191,13 +191,13 @@ catch (SAXParseException spe) {
### 运行 `TransformationApp01` 示例
1. **导航至`样`目录。**
1. **导航至`样`目录。**
```
%cd install-dir / jaxp-1_4_2- 释放日期 /样
%cd install-dir / jaxp-1_4_2- 释放日期 /样
```
2. **[`Download the XSLT examples by clicking this link`](../examples/xslt_samples.zip) 并将它们解压缩到 _install-dir_ `/ jaxp-1_4_2-` _ 释放日期 _ `/样`目录。**
2. **[`Download the XSLT examples by clicking this link`](../examples/xslt_samples.zip) 并将它们解压缩到 _install-dir_ `/ jaxp-1_4_2-` _ 释放日期 _ `/样`目录。**
3. **导航到 `xslt` 目录。**
```
......@@ -216,7 +216,7 @@ catch (SAXParseException spe) {
5. **Run the `TransformationApp01` sample on an XML file.**
在下面的例子中, `TransformationApp01` 在解压缩样包后在 `xslt / data` 目录中找到的文件 `foo.xml` 上运行。
在下面的例子中, `TransformationApp01` 在解压缩样包后在 `xslt / data` 目录中找到的文件 `foo.xml` 上运行。
```
% java TransformationApp01 data/foo.xml
......@@ -296,15 +296,15 @@ transformer.transform(source, result);
```
### 运行 `TranformationApp02` 样
### 运行 `TranformationApp02` 样
1. **导航至`样`目录。**
1. **导航至`样`目录。**
```
%cd install-dir / jaxp-1_4_2- 释放日期 /样
%cd install-dir / jaxp-1_4_2- 释放日期 /样
```
2. **[`Download the XSLT examples by clicking this link`](../examples/xslt_samples.zip) 并将它们解压缩到 _install-dir_ `/ jaxp-1_4_2-` _ 释放日期 _ `/样`目录。**
2. **[`Download the XSLT examples by clicking this link`](../examples/xslt_samples.zip) 并将它们解压缩到 _install-dir_ `/ jaxp-1_4_2-` _ 释放日期 _ `/样`目录。**
3. **导航到 `xslt` 目录。**
```
......@@ -323,7 +323,7 @@ transformer.transform(source, result);
5. **Run the `TranformationApp02` sample on an XML file.**
在下面的情况中, `TranformationApp02` 在解压缩样包后,在 `xslt / data` 目录中找到的文件 `foo.xml` 上运行。
在下面的情况中, `TranformationApp02` 在解压缩样包后,在 `xslt / data` 目录中找到的文件 `foo.xml` 上运行。
```
% java TranformationApp02 data/foo.xml
......
......@@ -56,7 +56,7 @@ objectclass: person
* * *
**注 -** 本节讨论的代码位于 `AddressBookReader01.java` 中,解压缩 [`XSLT examples`](../examples/xslt_samples.zip) 后可在 `xslt` 目录中找到]进入 _install-dir_ `/ jaxp-1_4_2-` _ 发布日期 _ `/样`目录。
**注 -** 本节讨论的代码位于 `AddressBookReader01.java` 中,解压缩 [`XSLT examples`](../examples/xslt_samples.zip) 后可在 `xslt` 目录中找到]进入 _install-dir_ `/ jaxp-1_4_2-` _ 发布日期 _ `/样`目录。
* * *
......@@ -144,15 +144,15 @@ public class AddressBookReader01 {
输出方法包含行结构的逻辑。它需要三个参数。第一个参数赋予方法显示的名称,因此它可以输出 `html` 作为变量名,而不是 `xmozillausehtmlmail` 。第二个参数给出了存储在文件中的变量名称( `xmozillausehtmlmail` )。第三个参数给出包含数据的行。然后,例程从行的开头剥离变量名称,并输出所需的名称和数据。
### 运行 `AddressBookReader01` 样
### 运行 `AddressBookReader01` 样
1. **导航至`样`目录。**
1. **导航至`样`目录。**
```
%cd install-dir / jaxp-1_4_2- 释放日期 /样
%cd install-dir / jaxp-1_4_2- 释放日期 /样
```
2. **[`Download the XSLT examples by clicking this link`](../examples/xslt_samples.zip) 并将它们解压缩到 _install-dir_ `/ jaxp-1_4_2-` _ 释放日期 _ `/样`目录。**
2. **[`Download the XSLT examples by clicking this link`](../examples/xslt_samples.zip) 并将它们解压缩到 _install-dir_ `/ jaxp-1_4_2-` _ 释放日期 _ `/样`目录。**
3. **导航到 `xslt` 目录。**
```
......@@ -171,7 +171,7 @@ public class AddressBookReader01 {
5. **Run the `AddressBookReader01` sample on a data file.**
在下面的例子中, `AddressBookReader01` 在上面显示的文件 `PersonalAddressBook.ldif` 上运行,在解压缩样包后找到 `xslt / data` 目录。
在下面的例子中, `AddressBookReader01` 在上面显示的文件 `PersonalAddressBook.ldif` 上运行,在解压缩样包后找到 `xslt / data` 目录。
```
% java AddressBookReader01 data/PersonalAddressBook.ldif
......@@ -202,7 +202,7 @@ public class AddressBookReader01 {
* * *
**注 -** 本节讨论的代码位于 `AddressBookReader02.java` 中,解压缩 [`XSLT examples`](../examples/xslt_samples.zip) 后可在 `xslt` 目录中找到]进入 _install-dir_ `/ jaxp-1_4_2-` _ 发布日期 _ `/样`目录。 `AddressBookReader02.java` 改编自 `AddressBookReader01.java` ,因此这里仅讨论两个示例之间的代码差异。
**注 -** 本节讨论的代码位于 `AddressBookReader02.java` 中,解压缩 [`XSLT examples`](../examples/xslt_samples.zip) 后可在 `xslt` 目录中找到]进入 _install-dir_ `/ jaxp-1_4_2-` _ 发布日期 _ `/样`目录。 `AddressBookReader02.java` 改编自 `AddressBookReader01.java` ,因此这里仅讨论两个示例之间的代码差异。
* * *
......@@ -433,7 +433,7 @@ public boolean getFeature(String name) { return false; }
* * *
**注 -** 注意:本节讨论的代码位于 `TransformationApp03.java` 中,解压缩 [`XSLT examples`后可在 `xslt` 目录中找到](../examples/xslt_samples.zip)进入 _install-dir_ `/ jaxp-1_4_2-` _ 发布日期 _ `/样`目录。
**注 -** 注意:本节讨论的代码位于 `TransformationApp03.java` 中,解压缩 [`XSLT examples`后可在 `xslt` 目录中找到](../examples/xslt_samples.zip)进入 _install-dir_ `/ jaxp-1_4_2-` _ 发布日期 _ `/样`目录。
* * *
......@@ -495,13 +495,13 @@ transformer.transform(source, result);
### 运行 `TransformationApp03` 示例
1. **导航至`样`目录。**
1. **导航至`样`目录。**
```
%cd install-dir / jaxp-1_4_2- 释放日期 /样
%cd install-dir / jaxp-1_4_2- 释放日期 /样
```
2. **[`Download the XSLT examples by clicking this link`](../examples/xslt_samples.zip) 并将它们解压缩到 _install-dir_ `/ jaxp-1_4_2-` _ 释放日期 _ `/样`目录。**
2. **[`Download the XSLT examples by clicking this link`](../examples/xslt_samples.zip) 并将它们解压缩到 _install-dir_ `/ jaxp-1_4_2-` _ 释放日期 _ `/样`目录。**
3. **导航到 `xslt` 目录。**
```
......@@ -520,7 +520,7 @@ transformer.transform(source, result);
5. **Run the `TransformationApp03` sample on a data file you wish to convert to XML.**
在下面的例子中, `TransformationApp03` 运行在 `PersonalAddressBook.ldif` 文件上,在解压缩样包后找到 `xslt / data` 目录。
在下面的例子中, `TransformationApp03` 运行在 `PersonalAddressBook.ldif` 文件上,在解压缩样包后找到 `xslt / data` 目录。
```
% java TransformationApp03
......
......@@ -76,7 +76,7 @@
* * *
**注意 -** 本节讨论的代码在 `article1.xml` 中,解压后 [`XSLT examples`,在 `xslt / data` 目录中找到](../examples/xslt_samples.zip)进入 _install-dir_ `/ jaxp-1_4_2-` _ 发布日期 _ `/样`目录。
**注意 -** 本节讨论的代码在 `article1.xml` 中,解压后 [`XSLT examples`,在 `xslt / data` 目录中找到](../examples/xslt_samples.zip)进入 _install-dir_ `/ jaxp-1_4_2-` _ 发布日期 _ `/样`目录。
* * *
......@@ -125,7 +125,7 @@
* * *
**注 -** 本节讨论的代码在 `article1a.xsl` 中,在解压缩 [`XSLT examples`后可在 `xslt / data` 目录中找到](../examples/xslt_samples.zip)进入 _install-dir_ `/ jaxp-1_4_2-` _ 发布日期 _ `/样`目录。
**注 -** 本节讨论的代码在 `article1a.xsl` 中,在解压缩 [`XSLT examples`后可在 `xslt / data` 目录中找到](../examples/xslt_samples.zip)进入 _install-dir_ `/ jaxp-1_4_2-` _ 发布日期 _ `/样`目录。
* * *
......@@ -319,7 +319,7 @@ XSLT 的工作原理是将源树转换为结果树。为了可视化 XSLT 操作
* * *
**注意 -** 本节讨论的代码在 `Stylizer.java` 中,解压 [`XSLT examples`](../examples/xslt_samples.zip) 后可在 `xslt` 目录中找到]进入 _install-dir_ `/ jaxp-1_4_2-` _ 发布日期 _ `/样`目录。结果是 `stylizer1a.html` ,见于 `xslt / data` 。
**注意 -** 本节讨论的代码在 `Stylizer.java` 中,解压 [`XSLT examples`](../examples/xslt_samples.zip) 后可在 `xslt` 目录中找到]进入 _install-dir_ `/ jaxp-1_4_2-` _ 发布日期 _ `/样`目录。结果是 `stylizer1a.html` ,见于 `xslt / data` 。
* * *
......@@ -363,13 +363,13 @@ public class Stylizer {
### 运行 `Stylizer` Sample
1. **导航至``目录。**
1. **导航至``目录。**
```
%cd install-dir / jaxp-1_4_2- 释放日期 /样
%cd install-dir / jaxp-1_4_2- 释放日期 /样
```
2. **[`Download the XSLT examples by clicking this link`](../examples/xslt_samples.zip) 并将它们解压缩到 _install-dir_ `/ jaxp-1_4_2-` _ 释放日期 _ `/样`目录。**
2. **[`Download the XSLT examples by clicking this link`](../examples/xslt_samples.zip) 并将它们解压缩到 _install-dir_ `/ jaxp-1_4_2-` _ 释放日期 _ `/样`目录。**
3. **导航到 `xslt` 目录。**
```
......@@ -423,7 +423,7 @@ public class Stylizer {
* * *
**注 -** 本节讨论的样式表在 `article1b.xsl` 中,在解压缩 [`XSLT examples`后可在 `xslt / data` 目录中找到](../examples/xslt_samples.zip)进入 _install-dir_ `/ jaxp-1_4_2-` _ 发布日期 _ `/样`目录。结果是 `stylizer1b.html` ,见于 `xslt / data` 。
**注 -** 本节讨论的样式表在 `article1b.xsl` 中,在解压缩 [`XSLT examples`后可在 `xslt / data` 目录中找到](../examples/xslt_samples.zip)进入 _install-dir_ `/ jaxp-1_4_2-` _ 发布日期 _ `/样`目录。结果是 `stylizer1b.html` ,见于 `xslt / data` 。
* * *
......@@ -443,13 +443,13 @@ public class Stylizer {
### 使用 Trimmed Whitespace 运行 `Stylizer` Sample
1. **导航至``目录。**
1. **导航至``目录。**
```
%cd install-dir / jaxp-1_4_2- 释放日期 /样
%cd install-dir / jaxp-1_4_2- 释放日期 /样
```
2. **[`Download the XSLT examples by clicking this link`](../examples/xslt_samples.zip) 并将它们解压缩到 _install-dir_ `/ jaxp-1_4_2-` _ 释放日期 _ `/样`目录。**
2. **[`Download the XSLT examples by clicking this link`](../examples/xslt_samples.zip) 并将它们解压缩到 _install-dir_ `/ jaxp-1_4_2-` _ 释放日期 _ `/样`目录。**
3. **导航到 `xslt` 目录。**
```
......@@ -511,7 +511,7 @@ public class Stylizer {
* * *
**注 -** 本节讨论的样式表在 `article1c.xsl` 中,在解压缩 [`XSLT examples`后可在 `xslt / data` 目录中找到](../examples/xslt_samples.zip)进入 _install-dir_ `/ jaxp-1_4_2-` _ 发布日期 _ `/样`目录。结果是 `stylizer1c.html` ,见于 `xslt / data` 。
**注 -** 本节讨论的样式表在 `article1c.xsl` 中,在解压缩 [`XSLT examples`后可在 `xslt / data` 目录中找到](../examples/xslt_samples.zip)进入 _install-dir_ `/ jaxp-1_4_2-` _ 发布日期 _ `/样`目录。结果是 `stylizer1c.html` ,见于 `xslt / data` 。
* * *
......@@ -530,13 +530,13 @@ public class Stylizer {
### 使用 All Whitespace Trimmed 运行 `Stylizer` Sample
1. **导航至``目录。**
1. **导航至``目录。**
```
%cd install-dir / jaxp-1_4_2- 释放日期 /样
%cd install-dir / jaxp-1_4_2- 释放日期 /样
```
2. **[`Download the XSLT examples by clicking this link`](../examples/xslt_samples.zip) 并将它们解压缩到 _install-dir_ `/ jaxp-1_4_2-` _ 释放日期 _ `/样`目录。**
2. **[`Download the XSLT examples by clicking this link`](../examples/xslt_samples.zip) 并将它们解压缩到 _install-dir_ `/ jaxp-1_4_2-` _ 释放日期 _ `/样`目录。**
3. **导航到 `xslt` 目录。**
```
......@@ -602,7 +602,7 @@ public class Stylizer {
* * *
**注 -** 本节中描述的示例文档是 `article2.xml` ,用于操作它的样式表是 `article2.xsl` 。结果是 `stylizer2.html` 。将 [`XSLT examples`](../examples/xslt_samples.zip) 解压缩到 _install-dir_ `/ jaxp-1_4_2-` 后,可以在 `xslt / data` 目录中找到这些文件 _ 发布日期 _ `/样`目录。
**注 -** 本节中描述的示例文档是 `article2.xml` ,用于操作它的样式表是 `article2.xsl` 。结果是 `stylizer2.html` 。将 [`XSLT examples`](../examples/xslt_samples.zip) 解压缩到 _install-dir_ `/ jaxp-1_4_2-` 后,可以在 `xslt / data` 目录中找到这些文件 _ 发布日期 _ `/样`目录。
* * *
......@@ -755,15 +755,15 @@ col
* * *
### 使用 `LIST` 和``元素定义运行 `Stylizer` 样
### 使用 `LIST` 和``元素定义运行 `Stylizer` 样
1. **导航至``目录。**
1. **导航至``目录。**
```
%cd install-dir / jaxp-1_4_2- 释放日期 /样
%cd install-dir / jaxp-1_4_2- 释放日期 /样
```
2. **[`Download the XSLT examples by clicking this link`](../examples/xslt_samples.zip) 并将它们解压缩到 _install-dir_ `/ jaxp-1_4_2-` _ 释放日期 _ `/样`目录。**
2. **[`Download the XSLT examples by clicking this link`](../examples/xslt_samples.zip) 并将它们解压缩到 _install-dir_ `/ jaxp-1_4_2-` _ 释放日期 _ `/样`目录。**
3. **导航到 `xslt` 目录。**
```
......@@ -979,15 +979,15 @@ col
在这种情况下,参数的内容由`&lt; xsl:apply-templates /&gt;生成。` 标签,用于在 `LINK` 元素下插入文本节点的内容。
### 运行带有内联元素的`样式器`样
### 运行带有内联元素的`样式器`样
1. **导航至``目录。**
1. **导航至``目录。**
```
%cd install-dir / jaxp-1_4_2- 释放日期 /样
%cd install-dir / jaxp-1_4_2- 释放日期 /样
```
2. **[`Download the XSLT examples by clicking this link`](../examples/xslt_samples.zip) 并将它们解压缩到 _install-dir_ `/ jaxp-1_4_2-` _ 释放日期 _ `/样`目录。**
2. **[`Download the XSLT examples by clicking this link`](../examples/xslt_samples.zip) 并将它们解压缩到 _install-dir_ `/ jaxp-1_4_2-` _ 释放日期 _ `/样`目录。**
3. **导航到 `xslt` 目录。** &lt;
```
......
......@@ -2,7 +2,7 @@
> 原文: [https://docs.oracle.com/javase/tutorial/jaxp/properties/error.html](https://docs.oracle.com/javase/tutorial/jaxp/properties/error.html)
由于属性是当前版本的新属性,因此建议应用程序捕获适合于接口的异常,例如,以下示例中的 SAXException。捕获应用程序可能在旧版本上正常工作,例如,示例代码包含以下方法,该方法检测样是使用 JDK 版本运行还是支持新属性的 JAXP 实现:
由于属性是当前版本的新属性,因此建议应用程序捕获适合于接口的异常,例如,以下示例中的 SAXException。捕获应用程序可能在旧版本上正常工作,例如,示例代码包含以下方法,该方法检测样是使用 JDK 版本运行还是支持新属性的 JAXP 实现:
```
public boolean isNewPropertySupported() {
......
......@@ -2,7 +2,7 @@
> 原文: [https://docs.oracle.com/javase/tutorial/jaxp/limits/error.html](https://docs.oracle.com/javase/tutorial/jaxp/limits/error.html)
建议应用程序在设置其中一个新属性时捕获 `org.xml.sax.SAXNotRecognizedException` 异常,以便应用程序在不支持它们的旧版本上正常工作。例如,可下载的[示例代码](sample.html)包含以下方法, `isNewPropertySupported` ,它检测样是否使用支持 `JDK_GENERAL_ENTITY_SIZE_LIMIT` 属性的 JDK 版本运行:
建议应用程序在设置其中一个新属性时捕获 `org.xml.sax.SAXNotRecognizedException` 异常,以便应用程序在不支持它们的旧版本上正常工作。例如,可下载的[示例代码](sample.html)包含以下方法, `isNewPropertySupported` ,它检测样是否使用支持 `JDK_GENERAL_ENTITY_SIZE_LIMIT` 属性的 JDK 版本运行:
```
public boolean isNewPropertySupported() {
......
# 样
# 样
> 原文: [https://docs.oracle.com/javase/tutorial/jaxp/limits/sample.html](https://docs.oracle.com/javase/tutorial/jaxp/limits/sample.html)
你可以下载 [``samples.zip` `](../examples/samples.zip)文件,其中包含两个 Java 应用程序文件, `LimitSamples.java``SampleBase.java` 和一个目录,`样`,其中包含该示例的 xml 文件。
你可以下载 [``samples.zip` `](../examples/samples.zip)文件,其中包含两个 Java 应用程序文件, `LimitSamples.java``SampleBase.java` 和一个目录,`样`,其中包含该示例的 xml 文件。
要运行该示例,请解压缩 `samples.zip` 文件,编译并在命令行上执行以下命令:
......
......@@ -4,7 +4,7 @@
要声明实现接口的类,请在类声明中包含`implements`子句。您的类可以实现多个接口,因此`implements`关键字后跟一个逗号分隔的类实现的接口列表。按照惯例,`implements`子句遵循`extends`子句,如果有的话。
## 样接口,可重复
## 样接口,可重复
考虑一个定义如何比较对象大小的接口。
......
......@@ -2,7 +2,7 @@
> 原文: [https://docs.oracle.com/javase/tutorial/security/toolfilex/step1.html](https://docs.oracle.com/javase/tutorial/security/toolfilex/step1.html)
您需要的第一件事是合同文件。您可以下载并使用这个名为 [`contract`](examples/contract) 的基本样文件。或者您可以使用您喜欢的任何其他文件。只需确保将文件命名为`contract`,以便它可以使用本课中指定的命令。
您需要的第一件事是合同文件。您可以下载并使用这个名为 [`contract`](examples/contract) 的基本样文件。或者您可以使用您喜欢的任何其他文件。只需确保将文件命名为`contract`,以便它可以使用本课中指定的命令。
获得合同文件后,将其放入 JAR 文件中。在命令窗口中键入以下内容:
......
......@@ -9,6 +9,6 @@ java GenSig data
```
您可以下载并使用名为 [`data`](examples/data) 的样文件或您喜欢的任何其他文件。该文件不会被修改。将读取它以便为其生成签名。
您可以下载并使用名为 [`data`](examples/data) 的样文件或您喜欢的任何其他文件。该文件不会被修改。将读取它以便为其生成签名。
执行程序后,您应该看到保存的`suepk`(公钥)和`sig`(签名)文件。
\ No newline at end of file
......@@ -16,7 +16,7 @@
* `sig`
* `data`
这是一个样运行;粗体表示您键入的内容。
这是一个样运行;粗体表示您键入的内容。
```
%java VerSig suepk sig data
......
......@@ -21,5 +21,5 @@
* [ExampleGame](game.html)
* [HighScore 类](highscore.html)
* [HighScorePermission 类](perm.html)
* [政策文件](policy.html)
* [政策文件](policy.html)
* [全部放在一起](together.html)
\ No newline at end of file
......@@ -147,7 +147,7 @@ Implements the SPI. An application with extensible services enable you, vendors,
以下步骤说明如何重新创建文件 `[DictionaryServiceDemo.zip](examples/DictionaryServiceDemo/DictionaryServiceDemo.zip)`的内容。这些步骤向您展示了示例的工作原理以及如何运行它。
`DictionaryServiceDemo`定义了一个 SPI, [``Dictionary.java``](examples/DictionaryServiceDemo/DictionaryServiceProvider/src/dictionary/spi/Dictionary.java)接口。它只包含一种方法:
`DictionaryServiceDemo`定义了一个 SPI, [``Dictionary.java``](examples/DictionaryServiceDemo/DictionaryServiceProvider/src/dictionary/spi/Dictionary.java)接口。它只包含一种方法:
```
package dictionary.spi;
......@@ -325,9 +325,9 @@ dictionary.ExtendedDictionary
```
由于开发完整的字处理器应用程序是一项重要任务,因此本教程提供了一个使用`DictionaryService``Dictionary` SPI 的更简单的应用程序。 `DictionaryDemo`搜索来自任何`Dictionary`提供者的单词 _book_ , _editor_ , _xml_ 和 _REST_ 单词类路径并检索它们的定义。
由于开发完整的字处理器应用程序是一项重要任务,因此本教程提供了一个使用`DictionaryService``Dictionary` SPI 的更简单的应用程序。 `DictionaryDemo`搜索来自任何`Dictionary`提供者的单词 _book_ , _editor_ , _xml_ 和 _REST_ 单词类路径并检索它们的定义。
以下是 [``DictionaryDemo``](examples/DictionaryServiceDemo/DictionaryDemo/src/dictionary/DictionaryDemo.java)。它从`DictionaryService`实例请求定义目标字,该实例将请求传递给其已知的`Dictionary`提供者。
以下是 [``DictionaryDemo``](examples/DictionaryServiceDemo/DictionaryDemo/src/dictionary/DictionaryDemo.java)。它从`DictionaryService`实例请求定义目标字,该实例将请求传递给其已知的`Dictionary`提供者。
```
package dictionary;
......
......@@ -92,7 +92,7 @@ public class ClassDeclarationSpy {
```
接下来是一些输出样。用户输入以斜体显示。
接下来是一些输出样。用户输入以斜体显示。
```
$ java ClassDeclarationSpy java.util.concurrent.ConcurrentNavigableMap
......
......@@ -112,7 +112,7 @@ public class ClassSpy {
这个例子比较紧凑;然而,由于 [`java.lang.reflect.Member`](https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Member.html) 接口自最早的反射实现以来已经存在,因此`printMembers()`方法略显尴尬,并且当泛型时它无法修改为包含更有用的`getGenericString()`方法介绍了。唯一的选择是如图所示进行测试和铸造,用`printConstructors()``printFields()``printMethods()`代替该方法,或者对 [`Member.getName()`](https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Member.html#getName--) 的相对备用结果感到满意。
输出样及其解释如下。用户输入以斜体显示。
输出样及其解释如下。用户输入以斜体显示。
```
$ java ClassSpy java.lang.ClassCastException CONSTRUCTOR
......
......@@ -2,7 +2,7 @@
> 原文: [https://docs.oracle.com/javase/tutorial/reflect/member/index.html](https://docs.oracle.com/javase/tutorial/reflect/member/index.html)
反射定义接口 [`java.lang.reflect.Member`](https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Member.html) ,其由 [`java.lang.reflect.Field`](https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Field.html)[`java.lang.reflect.Method`](https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Method.html)[`java.lang.reflect.Constructor`](https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Constructor.html) 实现。这一对象将在本课程中讨论。对于每个成员,本课程将描述用于检索声明和类型信息的关联 API,成员特有的任何操作(例如,设置字段的值或调用方法)以及常见的错误。将使用代码样和相关输出来说明每个概念,其近似于一些预期的反射用途。
反射定义接口 [`java.lang.reflect.Member`](https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Member.html) ,其由 [`java.lang.reflect.Field`](https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Field.html)[`java.lang.reflect.Method`](https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Method.html)[`java.lang.reflect.Constructor`](https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Constructor.html) 实现。这一对象将在本课程中讨论。对于每个成员,本课程将描述用于检索声明和类型信息的关联 API,成员特有的任何操作(例如,设置字段的值或调用方法)以及常见的错误。将使用代码样和相关输出来说明每个概念,其近似于一些预期的反射用途。
* * *
......
......@@ -34,7 +34,7 @@ public class FieldSpy<T> {
```
下面是样输出以检索此类中的三个公共字段的类型(`b``name`和参数化类型`list`)。用户输入以斜体显示。
下面是样输出以检索此类中的三个公共字段的类型(`b``name`和参数化类型`list`)。用户输入以斜体显示。
```
$ java FieldSpy FieldSpy b
......
......@@ -43,7 +43,7 @@ public class ArrayFind {
[`Class.getName()`](https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getName--) 中描述了`Class.get*Type()`的返回值的语法。类型名称开头的“`[`”字符数表示数组的维数(即嵌套深度)。
输出样如下。用户输入以斜体显示。一个原始类型数组`byte`
输出样如下。用户输入以斜体显示。一个原始类型数组`byte`
```
$java ArrayFind java.nio.ByteBuffer
......
......@@ -45,7 +45,7 @@ public class EnumConstants {
```
输出样如下。用户输入以斜体显示。
输出样如下。用户输入以斜体显示。
```
$ java EnumConstants java.lang.annotation.RetentionPolicy
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册