public class DataHandler extends Object implements Transferable
DataHandler和可传输接口
DataHandler实现了可传输接口,以便数据可用于AWT数据传输操作,如剪切和粘贴和拖放。 Transferable接口的实现依赖于与DataHandler的特定实例中表示的数据的MIME类型相对应的已安装DataContentHandler对象的可用性。
DataHandler和CommandMaps
DataHandler在跟踪它使用为命令(服务请求当前的CommandMap的getCommand
, getAllCommands
, getPreferredCommands
)。 DataHandler的每个实例可能都有一个与它相关联的CommandMap,使用setCommandMap
方法。 如果没有设置CommandMap,DataHandler会在getDefaultCommandMap
中调用getDefaultCommandMap
方法,并使用它返回的值。 见的CommandMap以获取更多信息。
DataHandler和URL
当使用URL构造时,当前的DataHandler实现创建一个URLDataSource的私有实例。
CommandMap
, DataContentHandler
, DataSource
, URLDataSource
Constructor and Description |
---|
DataHandler(DataSource ds)
创建引用指定的DataSource的
DataHandler 实例。
|
DataHandler(Object obj, String mimeType)
创建一个
DataHandler 此MIME类型对象的
DataHandler 实例。
|
DataHandler(URL url)
创建引用URL的
DataHandler 实例。
|
Modifier and Type | Method and Description |
---|---|
CommandInfo[] |
getAllCommands()
返回此类型数据的所有命令。
|
Object |
getBean(CommandInfo cmdinfo)
一个方便的方法,它接受CommandInfo对象并实例化相应的命令,通常是一个JavaBean组件。
|
CommandInfo |
getCommand(String cmdName)
获取命令
cmdName 。
|
Object |
getContent()
以其首选对象形式返回数据。
|
String |
getContentType()
返回从源对象检索的此对象的MIME类型。
|
DataSource |
getDataSource()
返回与此DataHandler实例关联的DataSource。
|
InputStream |
getInputStream()
获取此对象的InputStream。
|
String |
getName()
返回数据对象的名称。
|
OutputStream |
getOutputStream()
获取此DataHandler的OutputStream以允许覆盖底层数据。
|
CommandInfo[] |
getPreferredCommands()
返回此类型数据的
首选命令。
|
Object |
getTransferData(DataFlavor flavor)
返回表示要传输的数据的对象。
|
DataFlavor[] |
getTransferDataFlavors()
返回此数据可用的DataFlavors。
|
boolean |
isDataFlavorSupported(DataFlavor flavor)
返回此对象是否支持指定的数据flavor。
|
void |
setCommandMap(CommandMap commandMap)
设置CommandMap以供DataHandler使用。
|
static void |
setDataContentHandlerFactory(DataContentHandlerFactory newFactory)
设置DataContentHandlerFactory。
|
void |
writeTo(OutputStream os)
将数据写入
OutputStream 。
|
public DataHandler(DataSource ds)
DataHandler
实例。
数据以字节流形式存在。
DataSource将提供一个InputStream来访问数据。
ds
- DataSource
public DataHandler(Object obj, String mimeType)
DataHandler
此MIME类型对象的DataHandler
实例。
当应用程序已经具有Java对象形式的数据的内存中表示时,将使用此构造函数。
obj
- Java对象
mimeType
- 对象的MIME类型
public DataHandler(URL url)
DataHandler
实例。
DataHandler内部创建一个URLDataSource
实例来表示URL。
url
- 一个URL对象
public DataSource getDataSource()
对于已使用DataSource实例化的DataHandler,此方法返回用于创建DataHandler对象的DataSource。 在其他情况下,DataHandler根据用于构造DataHandler的数据构建DataSource。 为DataHandler创建的DataSource 未实例化DataSource为缓存高性能的原因。
public String getName()
DataSource.getName
方法,否则返回null 。
public String getContentType()
public InputStream getInputStream() throws IOException
对于使用DataSource实例化的DataHandler,DataHandler调用DataSource.getInputStream
方法并将结果返回给调用者。
对于使用Object实例化的DataHandler,DataHandler首先尝试为对象找到一个DataContentHandler。 如果DataHandler找不到此MIME类型的DataContentHandler,则会引发UnsupportedDataTypeException。 如果成功,它将创建一个管道和一个线程。 线程使用DataContentHandler的writeTo
方法将流数据写入管道的一端。 管道的另一端返回给调用者。 由于创建线程以复制数据,因此在复制期间可能发生的IOExceptions无法传播回调用者。 结果是一个空的流。
IOException
- 如果发生I / O错误
DataContentHandler.writeTo(java.lang.Object, java.lang.String, java.io.OutputStream)
, UnsupportedDataTypeException
public void writeTo(OutputStream os) throws IOException
OutputStream
。
如果DataHandler是使用DataSource创建的,writeTo将检索InputStream,并将InputStream中的字节复制到传入的OutputStream。
如果DataHandler是使用对象创建的,writeTo将检索对象类型的DataContentHandler。 如果的DataContentHandler被发现,它调用writeTo
的方法DataContentHandler
。
os
- 要写入的OutputStream
IOException
- 如果发生I / O错误
public OutputStream getOutputStream() throws IOException
getOutputStream
方法。
否则返回null
。
IOException
DataSource.getOutputStream()
, URLDataSource
public DataFlavor[] getTransferDataFlavors()
返回一个DataFlavor对象数组,表示可以提供数据的风格。数组通常根据提供数据的偏好进行排序,从最丰富的描述到最不丰富的描述。
DataHandler尝试查找与数据的MIME类型相对应的DataContentHandler。 如果找到,DataHandler会调用DataContentHandler的getTransferDataFlavors
方法。
如果无法找到DataContentHandler,并且如果使用DataSource(或URL)创建了DataHandler,则会返回一个表示此对象的MIME类型和java.io.InputStream
类的java.io.InputStream
。 如果使用对象和MIME类型创建了DataHandler,那么getTransferDataFlavors将返回一个表示此对象的MIME类型和对象类的DataFlavor。
getTransferDataFlavors
在界面
Transferable
DataContentHandler.getTransferDataFlavors()
public boolean isDataFlavorSupported(DataFlavor flavor)
该方法遍历从getTransferDataFlavors返回的getTransferDataFlavors
,将每个与指定的风味进行比较。
isDataFlavorSupported
在界面
Transferable
flavor
- 数据所需的风味
getTransferDataFlavors()
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException
对于使用DataSources或URL创建的DataHandler:
DataHandler尝试为此MIME类型定位DataContentHandler。 如果找到,则DataFlavor中传递的数据和数据类型将传递给其getTransferData
方法。 如果DataHandler找不到DataContentHandler,并且flavor指定了此对象的MIME类型和java.io.InputStream
类,则返回此对象的InputStream。 否则会引发UnsupportedFlavorException。
对于使用对象创建的DataHandler:
DataHandler尝试为此MIME类型定位DataContentHandler。 如果找到,则DataFlavor中传递的数据和数据类型将传递给其getTransferData方法。 如果DataHandler找不到DataContentHandler,并且flavor指定此对象的MIME类型及其类,则会返回此DataHandler的引用对象。 否则会引发UnsupportedFlavorException。
getTransferData
在界面
Transferable
flavor
- 数据所要求的风味
UnsupportedFlavorException
- 如果数据无法转换为请求的风味
IOException
- 如果发生I / O错误
ActivationDataFlavor
public void setCommandMap(CommandMap commandMap)
null
会导致CommandMap恢复为CommandMap.getDefaultCommandMap
方法返回的CommandMap.getDefaultCommandMap
。
更改CommandMap或将其设置为null
,将清除从上一个CommandMap缓存的任何数据。
commandMap
- 要在此DataHandler中使用的CommandMap
CommandMap.setDefaultCommandMap(javax.activation.CommandMap)
public CommandInfo[] getPreferredCommands()
getPreferredCommands
与此DataHandler实例关联的方法的CommandMap。
此方法返回一个表示可用命令子集的数组。
在存在由DataHandler表示的MIME类型的多个命令的情况下,安装的CommandMap将选择相应的命令。
CommandMap.getPreferredCommands(java.lang.String)
public CommandInfo[] getAllCommands()
getAllCommands
方法。
CommandMap.getAllCommands(java.lang.String)
public CommandInfo getCommand(String cmdName)
getCommand
方法。
cmdName
- 命令名
CommandMap.getCommand(java.lang.String, java.lang.String)
public Object getContent() throws IOException
如果使用对象实例化了DataHandler,则返回该对象。
如果DataHandler用DataSource实例化,则此方法使用DataContentHandler返回此DataHandler表示的数据的内容对象。 如果没有DataContentHandler
可以为这个数据类型可以发现,的DataHandler返回数据的InputStream。
IOException
- 如果在此操作期间发生IOException。
public Object getBean(CommandInfo cmdinfo)
这种方法调用CommandInfo的getCommandObject
方法与ClassLoader
用于加载javax.activation.DataHandler
类本身。
cmdinfo
- 与命令对应的CommandInfo
public static void setDataContentHandlerFactory(DataContentHandlerFactory newFactory)
如果DataContentHandlerFactory已经被设置,这个方法会抛出一个错误。
newFactory
- DataContentHandlerFactory
Error
- 如果工厂已经定义。
DataContentHandlerFactory