У нас есть проект, который занимается файлами различных кодировок. Я использую BOMInputStream, чтобы пропустить маркеры порядка следования байтов UTF-8. Существующий код работает, но он также должен поддерживать варианты UTF-16. Самый простой подход — передать конструктору BOMInputStream несколько маркеров ByteOrderMarkers.
По документации...
BOMInputStream bomIn = new BOMInputStream(in,
ByteOrderMark.UTF_16LE,
ByteOrderMark.UTF_16BE,
ByteOrderMark.UTF_32LE,
ByteOrderMark.UTF_32BE);
В подписи конструктора используются переменные аргументы:
public BOMInputStream(InputStream delegate,
ByteOrderMark... boms)
Однако, когда я пытаюсь вызвать этот конструктор, используя следующий код
<cfset var fis = createObject("java", "java.io.FileInputStream").init(arguments.filePath) />
<cfset var boms = createObject("java", "org.apache.commons.io.ByteOrderMark") />
<cfset var bomins = createObject("java", "org.apache.commons.io.input.BOMInputStream").init(fis, boms.UTF_8, boms.UTF_16LE, boms.UTF_16BE) />
Я получаю следующую ошибку...
Unable to find a constructor for class org.apache.commons.io.input.BOMInputStream that accepts parameters of type ( java.io.FileInputStream, org.apache.commons.io.ByteOrderMark, org.apache.commons.io.ByteOrderMark, org.apache.commons.io.ByteOrderMark ).
Я также пробовал только один аргумент спецификации и получаю ту же ошибку с меньшим количеством аргументов в ошибке. Таким образом, оказывается, что CF не может вызывать конструкторы Java с неограниченным количеством аргументов. Правильно ли это, и если да, то есть ли какие-либо известные обходные пути?