java.lang.Objectjava.awt.datatransfer.DataFlavor
public class DataFlavor
DataFlavor 提供有关数据的元信息。DataFlavor 通常用于访问剪切板上的数据,或者在执行拖放操作时使用。
DataFlavor 实例封装 RFC 2045 和 RFC 2046 中定义的内容类型。内容类型通常被称为 MIME 类型。
内容类型由媒体类型(被称为基本类型)、子类型和可选参数组成。关于 MIME 类型的语法的详细信息,请参阅 RFC 2045。
JRE 数据传输实现将 MIME 类型的参数 "class" 解释为一个表示形式类。表示形式类反映将被传输的对象的类。换句话说,表示形式类是由 Transferable.getTransferData(java.awt.datatransfer.DataFlavor) 返回的对象的类型。例如,imageFlavor 的 MIME 类型是 "image/x-java-image;class=java.awt.Image",基本类型是 image,子类型是 x-java-image,表示形式类是 java.awt.Image。当调用 getTransferData,且 DataFlavor 为 imageFlavor 时,返回 java.awt.Image 的实例。要重点注意的是,DataFlavor 不会依据表示形式类进行任何错误检查。由 DataFlavor 的使用者(如 Transferable)决定是否遵守表示形式类。
注意,如果在创建 DataFlavor 时没有指定表示形式类,则使用默认表示形式类。有关 DataFlavor 的构造方法,请参阅适当的文档。
此外,具有 "text" 基本 MIME 类型的 DataFlavor 实例可能有一个 "charset" 参数。有关 "text" MIME 类型和 "charset" 参数的详细信息,请参阅 RFC 2046 和 selectBestTextFlavor(java.awt.datatransfer.DataFlavor[]) 。
DataFlavors 的相等性由基本类型、子类型和表示形式类决定。有关详细信息,请参阅 equals(DataFlavor)。在确定相等性时,所有可选参数都被忽略。例如,以下代码产生的两个 DataFlavors 被认为是相等的:
DataFlavor flavor1 = new DataFlavor(Object.class, "X-test/test; class=<java.lang.Object>; foo=bar"); DataFlavor flavor2 = new DataFlavor(Object.class, "X-test/test; class=<java.lang.Object>; x=y"); // The following returns true. flavor1.equals(flavor2);正如上面提到的那样,
flavor1 和
flavor2 被认为是相等的。同样地,请求
Transferable 或
DataFlavor 将返回相同的结果。
有关在 Swing 中使用数据传输的更多信息,请参阅 Java Tutorial 中的 How to Use Drag and Drop and Data Transfer 一节。
| 字段摘要 | |
|---|---|
static DataFlavor |
imageFlavor DataFlavor 表示 Java Image 类,其中: |
static DataFlavor |
javaFileListFlavor 要将文件列表传入 Java(及底层平台)或从中传出,需要使用此类型/子类型的 DataFlavor 和 java.util.List 的表示形式类。 |
static String |
javaJVMLocalObjectMimeType 要将一个引用传输到不具有关联 MIME Content 类型的任意 Java 对象引用(跨越同一 JVM 中的 Transferable 接口),需要使用具有此类型/子类型的 DataFlavor,其中 representationClass 等于跨越 Transferable 传递的类/接口的类型。 |
static String |
javaRemoteObjectMimeType 为了通过拖放 ACTION_LINK 操作将活动链接传递到 Remote 对象,应该使用 Mime Content 类型的 application/x-java-remote-object,其中 DataFlavor 的表示形式类表示要传输的 Remote 接口的类型。 |
static String |
javaSerializedObjectMimeType MIME Content 类型的 application/x-java-serialized-object 表示已变得持久的 Java 对象的图形。 |
static DataFlavor |
plainTextFlavor 已过时。 从 1.3 开始。使用 DataFlavor.getReaderForText(Transferable) 代替 Transferable.getTransferData(DataFlavor.plainTextFlavor)。 |
static DataFlavor |
stringFlavor DataFlavor 表示 Java Unicode String 类,其中: |
| 构造方法摘要 | |
|---|---|
DataFlavor() 构造一个新的 DataFlavor。 |
|
DataFlavor(Class<?> representationClass, String humanPresentableName) 构造一个表示 Java 类的 DataFlavor。 |
|
DataFlavor(String mimeType) 根据 mimeType 字符串构造 DataFlavor。 |
|
DataFlavor(String mimeType, String humanPresentableName) 构造一个表示 MimeType 的 DataFlavor。 |
|
DataFlavor(String mimeType, String humanPresentableName, ClassLoader classLoader) 构造一个表示 MimeType 的 DataFlavor。 |
|
| 方法摘要 | |
|---|---|
Object |
clone() 返回此 DataFlavor 的副本。 |
boolean |
equals(DataFlavor that) 测试 DataFlavor 与此 DataFlavor 的相等性。 |
boolean |
equals(Object o) 测试任意 Object 与此 DataFlavor 的相等性。 |
boolean |
equals(String s) 已过时。 与 hashCode() 协定不一致,使用 isMimeTypeEqual(String) 代替。 |
Class<?> |
getDefaultRepresentationClass() |
String |
getDefaultRepresentationClassAsString() |
String |
getHumanPresentableName() 返回此 DataFlavor 表示的数据格式的得体的名称。 |
String |
getMimeType() 返回此 DataFlavor 的 MIME 类型字符串。 |
String |
getParameter(String paramName) 如果 paramName 等于 "humanPresentableName",则返回此 DataFlavor 的得体的名称。 |
String |
getPrimaryType() 返回此 DataFlavor 的基本 MIME 类型。 |
Reader |
getReaderForText(Transferable transferable) 获取文本 flavor 的 Reader,如果需要,则为期望的 charset(编码的)解码。 |
Class<?> |
getRepresentationClass() 返回请求此 DataFlavor 时,支持此 DataFlavor 的对象将返回的 Class。 |
String |
getSubType() 返回此 DataFlavor 的子 MIME 类型。 |
static DataFlavor |
getTextPlainUnicodeFlavor() 返回表示具有 Unicode 编码的纯文本的 DataFlavor,其中: representationClass = java.io.InputStream mimeType = "text/plain; charset=<platform default Unicode encoding>" Sun 的 Microsoft Windows 实现使用编码 utf-16le。 |
int |
hashCode() 返回此 DataFlavor 的哈希码。 |
boolean |
isFlavorJavaFileListType() 如果指定的 DataFlavor 表示 File 对象列表,则返回 true。 |
boolean |
isFlavorRemoteObjectType() 如果指定的 DataFlavor 表示远程对象,则返回 true。 |
boolean |
isFlavorSerializedObjectType() 如果指定的 DataFlavor 表示序列化对象,则返回 true。 |
boolean |
isFlavorTextType() 返回此 DataFlavor 是否是 Java 平台此实现的有效文本 flavor。 |
boolean |
isMimeTypeEqual(DataFlavor dataFlavor) 比较两个 DataFlavor 对象的 mimeType。 |
boolean |
isMimeTypeEqual(String mimeType) 返回传入的 MIME 类型的字符串表示形式是否等于此 DataFlavor 的 MIME 类型。 |
boolean |
isMimeTypeSerializedObject() DataFlavor 是否表示序列化对象? |
boolean |
isRepresentationClassByteBuffer() 返回此 DataFlavor 的表示形式类是 java.nio.ByteBuffer 还是其子类。 |
boolean |
isRepresentationClassCharBuffer() 返回此 DataFlavor 的表示形式类是 java.nio.CharBuffer 还是其子类。 |
boolean |
isRepresentationClassInputStream() DataFlavor 是否表示 java.io.InputStream? |
boolean |
isRepresentationClassReader() 返回此 DataFlavor 的表示形式类是 java.io.Reader 还是其子类。 |
boolean |
isRepresentationClassRemote() 如果表示形式类为 Remote,则返回 true。 |
boolean |
isRepresentationClassSerializable() 如果表示形式类可序列化,则返回 true。 |
boolean |
match(DataFlavor that) 测试 DataFlavor 与此 DataFlavor 的相等性。 |
protected String |
normalizeMimeType(String mimeType) 已过时。 |
protected String |
normalizeMimeTypeParameter(String parameterName, String parameterValue) 已过时。 |
void |
readExternal(ObjectInput is) 根据 Serialized 状态还原此 DataFlavor。 |
static DataFlavor |
selectBestTextFlavor(DataFlavor[] availableFlavors) 从 DataFlavor 数组中选择最佳文本 DataFlavor。 |
void |
setHumanPresentableName(String humanPresentableName) 设置此 DataFlavor 表示的数据格式的得体的名称。 |
String |
toString() 此 DataFlavor 及其参数的字符串表示形式。 |
protected static Class<?> |
tryToLoadClass(String className, ClassLoader fallback) 试图从以下位置加载类:引导加载器、系统加载器、上下文加载器(如果存在)和指定的最终加载器。 |
void |
writeExternal(ObjectOutput os) 序列化此 DataFlavor。 |
| 从类 java.lang.Object 继承的方法 |
|---|
finalize, getClass, notify, notifyAll, wait, wait, wait |
| 字段详细信息 |
|---|
public static final DataFlavor stringFlavor
DataFlavor 表示 Java Unicode String 类,其中:
representationClass = java.lang.String
mimeType = "application/x-java-serialized-object"
public static final DataFlavor imageFlavor
DataFlavor 表示 Java Image 类,其中:
representationClass = java.awt.Image
mimeType = "image/x-java-image"
@Deprecated public static final DataFlavor plainTextFlavor
DataFlavor.getReaderForText(Transferable) 代替 Transferable.getTransferData(DataFlavor.plainTextFlavor)。
DataFlavor 表示使用 Unicode 编码的纯文本,其中:
representationClass = InputStream
mimeType = "text/plain; charset=unicode"
此
DataFlavor 已
过时,因为 (1) 其表示形式为 InputStream,一个基于 8 位的表示形式,而 Unicode 是一个 16 位的字符集;(2) charset "unicode" 意义不明确。"unicode" 意味着特定平台的 Unicode 实现,而不是跨平台的实现。
public static final String javaSerializedObjectMimeType
DataFlavor 关联的表示形式类可以标识对象的 Java 类型,这里的对象指调用
java.awt.datatransfer.getTransferData 时作为引用返回的对象。
public static final DataFlavor javaFileListFlavor
DataFlavor 和
java.util.List 的表示形式类。要求/保证列表的每个元素都是
java.io.File 类型。
public static final String javaJVMLocalObjectMimeType
Transferable 接口),需要使用具有此类型/子类型的
DataFlavor,其中
representationClass 等于跨越
Transferable 传递的类/接口的类型。
对于具有此 MIME Content 类型的 DataFlavor,从 Transferable.getTransferData 返回的对象引用必须是 DataFlavor 的表示形式类的实例。
public static final String javaRemoteObjectMimeType
ACTION_LINK 操作将活动链接传递到 Remote 对象,应该使用 Mime Content 类型的 application/x-java-remote-object,其中
DataFlavor 的表示形式类表示要传输的
Remote 接口的类型。
| 构造方法详细信息 |
|---|
public DataFlavor()
DataFlavor。提供此构造方法的目的只是为了支持
Externalizable 接口。它不用于公共(客户端)用途。
public DataFlavor(Class<?> representationClass, String humanPresentableName)
DataFlavor。
返回的 DataFlavor 将具有以下特征:
representationClass = representationClass
mimeType = application/x-java-serialized-object
representationClass - 用于在此 flavor 中传输数据的类
humanPresentableName - 用于标识此 flavor 的可读字符串;如果此参数为
null,则使用 MIME Content 类型的值
NullPointerException - 如果
representationClass 为 null
public DataFlavor(String mimeType, String humanPresentableName)
MimeType 的
DataFlavor。
返回的 DataFlavor 将具有以下特征:
如果 mimeType 为 "application/x-java-serialized-object; class=<representation class>",则结果与调用 new DataFlavor(Class:forName(<representation class>) 相同。
否则:
representationClass = InputStream
mimeType = mimeType
mimeType - 用于标识此 flavor 的 MIME 类型的字符串;如果
mimeType 没有指定 "class=" 参数,或者没有成功地加载类,则抛出
IllegalArgumentException
humanPresentableName - 用于标识此 flavor 的可读字符串;如果此参数为
null,则使用 MIME Content 类型的值
IllegalArgumentException - 如果
mimeType 无效或者没有成功加载类
NullPointerException - 如果
mimeType 为 null
public DataFlavor(String mimeType, String humanPresentableName, ClassLoader classLoader) throws ClassNotFoundException
MimeType 的
DataFlavor。
返回的 DataFlavor 将具有以下特征:
如果 mimeType 为 "application/x-java-serialized-object; class=<representation class>",则结果与调用 new DataFlavor(Class:forName(<representation class>) 相同。
否则:
representationClass = InputStream
mimeType = mimeType
mimeType - 用于标识此 flavor 的 MIME 类型的字符串
humanPresentableName - 用于标识此 flavor 的可读字符串
classLoader - 要使用的类加载器
ClassNotFoundException - 如果没有加载类
IllegalArgumentException - 如果
mimeType 无效
NullPointerException - 如果
mimeType 为 null
public DataFlavor(String mimeType) throws ClassNotFoundException
mimeType 字符串构造
DataFlavor。该字符串可以指定 "class=
DataFlavor。如果字符串不包含 "class=" 参数,则使用
java.io.InputStream 作为默认值。
mimeType - 用于标识此 flavor 的 MIME 类型的字符串;如果没有成功加载 "class=" 参数指定的类,则抛出
ClassNotFoundException
ClassNotFoundException - 如果没有加载类
IllegalArgumentException - 如果
mimeType 无效
NullPointerException - 如果
mimeType 为 null
| 方法详细信息 |
|---|
protected static final Class<?> tryToLoadClass(String className, ClassLoader fallback) throws ClassNotFoundException
className - 要加载的类的名称
fallback - 回退加载器
ClassNotFoundException - 如果未找到类
public String toString()
DataFlavor 及其参数的字符串表示形式。得到的
String 包含
DataFlavor 类的名称、此 flavor 的 MIME 类型及其表示形式类。如果此 flavor 具有 "text" 的基本 MIME 类型、支持 charset 参数并且具有编码的表示形式,则还包括 flavor 的 charset。有关支持 charset 参数的文本 flavor 列表,请参阅
selectBestTextFlavor。
DataFlavor 的字符串表示形式
selectBestTextFlavor(java.awt.datatransfer.DataFlavor[])
public static final DataFlavor getTextPlainUnicodeFlavor()
DataFlavor,其中:
representationClass = java.io.InputStream
mimeType = "text/plain;
charset=<platform default Unicode encoding>"
Sun 的 Microsoft Windows 实现使用编码
utf-16le。Sun 的 Solaris 和 Linux 实现使用编码
iso-10646-ucs-2。
DataFlavor
public static final DataFlavor selectBestTextFlavor(DataFlavor[] availableFlavors)
DataFlavor 数组中选择最佳文本
DataFlavor。只能选择
DataFlavor.stringFlavor、等效 flavor 和具有基本 MIME "text" 类型的 flavor。
首先 Flavor 按照其 MIME 类型排序,顺序如下所示:
例如,在 "text/html" 上选择 "text/sgml",在 DataFlavor.plainTextFlavor 上选择 DataFlavor.stringFlavor。
如果两个或更多 flavor 共享数组中的最佳 MIME 类型,则需要检查 MIME 类型以查看它是否支持 charset 参数。
以下 MIME 类型支持(或被视为支持)charset 参数:
DataFlavor 中。如果是这样,则 JRE 将假定从该点开始,MIME 类型支持 charset 参数,并且不再进行检查。如果没有显式列入该参数,则 JRE 将假定从该点开始,MIME 类型不支持 charset 参数,并且不再进行检查。因为此检查是在任意选择的
DataFlavor 上执行的,所以如果 MIME 类型支持 charset 参数,开发人员就必须确保所有具有该 "text/<other>" MIME 类型的
DataFlavor 指定了该参数。开发人员不应该依赖 JRE 用平台的默认 charset 来替代 "text/<other>" DataFlavor。不遵守此限制将导致不确定的行为。
如果数组中的最佳 MIME 类型不支持 charset 参数,则共享 MIME 类型的 flavor 按照其表示形式类排序,顺序如下所示:java.io.InputStream、java.nio.ByteBuffer、[B、<其他>。
如果两个或多个 flavor 共享最佳表示形式类,或者任何 flavor 都不具有三个指定的表示形式中的一个,则随意地选择这些 flavor 中的一个。
如果数组中的最佳 MIME 类型支持 charset 参数,则共享 MIME 类型的 flavor 按照其表示形式类排序,顺序如下所示:java.io.Reader、java.lang.String、java.nio.CharBuffer、[C、<其他>。
如果两个或多个 flavor 共享最佳表示形式类,并且该表示形式是明确列出的四个表示形式中的一个,则非随意地选择这些 flavor 中的一个。但是,如果任何 flavor 都不是四个指定的表示形式中的一个,则通过其 charset 对 flavor 排序。Unicode charset,如 "UTF-16"、"UTF-8"、"UTF-16BE"、"UTF-16LE" 及其别名被认为是最佳的。其次选择平台默认的 charset 及其别名。"US-ASCII" 及其别名最差。所有其他 charset 都是按字母顺序选择的,但是只考虑 Java 平台的此实现所支持的 charset。
如果两个或更多 flavor 共享最佳 charset,则 flavor 再次按照其表示形式类排序,顺序如下所示:java.io.InputStream、java.nio.ByteBuffer、[B、<其他>。
如果两个或多个 flavor 共享最佳表示形式类,或者任何 flavor 都不具有三个指定的表示形式中的一个,则非随意地选择这些 flavor 中的一个。
availableFlavors - 可用
DataFlavor 的数组
availableFlavors 为
null、长度为零或包含非文本 flavor,则返回
null
public Reader getReaderForText(Transferable transferable) throws UnsupportedFlavorException, IOException
java.io.Reader、
java.lang.String、
java.nio.CharBuffer、
[C、
java.io.InputStream、
java.nio.ByteBuffer 和
[B。
因为不支持 charset 参数的文本 flavor 是以非标准格式编码的,所以应为这种 flavor 调用此方法。但是,为了维护向后兼容性,如果为这样的 flavor 调用了此方法,那么此方法会将该 flavor 视为支持 charset 参数,并相应地尝试为其解码。有关不支持 charset 参数的文本 flavor 列表,请参阅 selectBestTextFlavor。
transferable - 将在此 flavor 中请求其数据的
Transferable
Transferable 数据的
Reader
IllegalArgumentException - 如果表示形式类不是上文列出的七种之一
IllegalArgumentException - 如果
Transferable 包含
null 数据
NullPointerException - 如果
Transferable 为
null
UnsupportedEncodingException - 如果此 flavor 的表示形式为
java.io.InputStream、
java.nio.ByteBuffer 或
[B,但 Java 平台的此实现不支持此 flavor 的编码
UnsupportedFlavorException - 如果
Transferable 不支持此 flavor
IOException - 如果因 I/O 错误而无法读取数据
selectBestTextFlavor(java.awt.datatransfer.DataFlavor[])
public String getMimeType()
DataFlavor 的 MIME 类型字符串。
public Class<?> getRepresentationClass()
DataFlavor 时,支持此
DataFlavor 的对象将返回的
Class。
DataFlavor 时,支持此
DataFlavor 的对象将返回的
Class。
public String getHumanPresentableName()
DataFlavor 表示的数据格式的得体的名称。此名称将由各个国家/地区来本地化。
DataFlavor 表示的数据格式的得体的名称
public String getPrimaryType()
DataFlavor 的基本 MIME 类型。
DataFlavor 的基本 MIME 类型
public String getSubType()
DataFlavor 的子 MIME 类型。
DataFlavor 的子 MIME 类型
public String getParameter(