Проблема с издевательством Java при использовании параллельных потоковJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Проблема с издевательством Java при использовании параллельных потоков

Сообщение Anonymous »

У меня есть следующий ImageService:

Код: Выделить всё

public class ImageService {

public ImageService() {
}

public List getBufferedImages(List imageBytesArrays) {
return imageBytesArrays.parallelStream()
.map(bytes -> {
try {
return getBufferedImageOrThrow(bytes);
} catch (IOException e) {
throw new RuntimeException(e);
}
})
.collect(Collectors.toList());
}

public BufferedImage getBufferedImageOrThrow(byte[] imageAsByteArray) throws IOException {
try (ByteArrayInputStream imageAsInputStream = new ByteArrayInputStream(imageAsByteArray)) {
BufferedImage bufferedImage = ImageIO.read(imageAsInputStream);

if (bufferedImage == null) {
throw new IOException("Failed to create BufferedImage object from image");
}

return bufferedImage;
}
}
Ниже приведен модульный тест:

Код: Выделить всё

@ExtendWith(MockitoExtension.class)
public class ImageServiceTest {

private static final Object lock = new Object();

@Test
void shouldHandleImagesWithParallelStream() {
try (MockedStatic imageIOMockedStatic = mockStatic(ImageIO.class)) {
imageIOMockedStatic
.when(() -> ImageIO.read(any(ByteArrayInputStream.class)))
.thenAnswer(invocation -> {
synchronized (lock) {
return new BufferedImage(10, 10, 1);
}
});

List imageBytesArrays = getTestBytesArrays();

ImageService imageService = new ImageService();

List bufferedImages = imageService.getBufferedImages(imageBytesArrays);

bufferedImages.forEach(Assertions::assertNotNull);
}
}

private List getTestBytesArrays() {
List imageBytesArrays = new ArrayList();

imageBytesArrays.add(new byte[]{1, 2, 3});
imageBytesArrays.add(new byte[]{4, 5, 6});
imageBytesArrays.add(new byte[]{7, 8, 9});
imageBytesArrays.add(new byte[]{10, 11, 12});
imageBytesArrays.add(new byte[]{13, 14, 15});
imageBytesArrays.add(new byte[]{16, 17, 18});

return imageBytesArrays;
}
}
Когда я запускаю тест, он постоянно терпит неудачу, поскольку ImageIO.read() всегда возвращает значение null. Если я заменю параллельный поток обычным потоком, это сработает, но я хочу, чтобы он работал с параллельным потоком (или какой-либо эквивалентной многопоточной схемой). Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/790 ... el-streams
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»