Как обновить минорную версию Symfony (4.1 до 4.2)

Невозможно сделать это напрямую. Меньшие единицы компьютеров могут обрабатывать байты (даже булевы занимают байты). Однако вы можете создать собственный класс потока, который упаковывает байт с нужными битами, а затем записывает его. Затем вы можете создать оболочку для этого класса, у которого функция записи принимает некоторый интегральный тип, проверяет, что она находится между 0 и 7 (или -4 и 3 ... или что-то еще), извлекает биты так же, как и класс BitInputStream (ниже) делает и выполняет соответствующие вызовы метода записи BitOutputStream. Возможно, вы думаете, что можете просто создать один набор классов потока ввода-вывода, но 3 не равномерно распределяется по 8. Поэтому, если вам нужна оптимальная эффективность хранения, и вы не хотите работать очень сильно, вы застряли с двумя уровнями абстракции. Ниже приведен класс BitOutputStream, соответствующий класс BitInputStream и программа, которая гарантирует их работу.

import java.io.IOException;
import java.io.OutputStream;

class BitOutputStream {

    private OutputStream out;
    private boolean[] buffer = new boolean[8];
    private int count = 0;

    public BitOutputStream(OutputStream out) {
        this.out = out;
    }

    public void write(boolean x) throws IOException {
        this.count++;
        this.buffer[8-this.count] = x;
        if (this.count == 8){
            int num = 0;
            for (int index = 0; index < 8; index++){
                num = 2*num + (this.buffer[index] ? 1 : 0);
            }

            this.out.write(num - 128);

            this.count = 0;
        }
    }

    public void close() throws IOException {
        int num = 0;
        for (int index = 0; index < 8; index++){
            num = 2*num + (this.buffer[index] ? 1 : 0);
        }

        this.out.write(num - 128);

        this.out.close();
    }

}

Я уверен, что есть способ упаковать int с битовыми операторами и, таким образом, избежать для изменения ввода, но я не думаю, что это трудно.

Кроме того, вы, вероятно, заметили, что нет локального способа обнаружить, что последний бит был прочитан в этой реализации, но я really не хотят думать , что hard.

import java.io.IOException;
import java.io.InputStream;

class BitInputStream {

    private InputStream in;
    private int num = 0;
    private int count = 8;

    public BitInputStream(InputStream in) {
        this.in = in;
    }

    public boolean read() throws IOException {
        if (this.count == 8){
            this.num = this.in.read() + 128;
            this.count = 0;
        }

        boolean x = (num%2 == 1);
        num /= 2;
        this.count++;

        return x;
    }

    public void close() throws IOException {
        this.in.close();
    }

}

Возможно, вы это знаете, но вы должны поместить BufferedStream между вашим BitStream и FileStream или это займет много времени.

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Random;

class Test {

    private static final int n = 1000000;

    public static void main(String[] args) throws IOException {

        Random random = new Random();

        //Generate array

        long startTime = System.nanoTime();

        boolean[] outputArray = new boolean[n];
        for (int index = 0; index < n; index++){
            outputArray[index] = random.nextBoolean();
        }

        System.out.println("Array generated in " + (double)(System.nanoTime() - startTime)/1000/1000/1000 + " seconds.");

        //Write to file

        startTime = System.nanoTime();

        BitOutputStream fout = new BitOutputStream(new BufferedOutputStream(new FileOutputStream("booleans.bin")));

        for (int index = 0; index < n; index++){
            fout.write(outputArray[index]);
        }

        fout.close();

        System.out.println("Array written to file in " + (double)(System.nanoTime() - startTime)/1000/1000/1000 + " seconds.");

        //Read from file

        startTime = System.nanoTime();

        BitInputStream fin = new BitInputStream(new BufferedInputStream(new FileInputStream("booleans.bin")));

        boolean[] inputArray = new boolean[n];
        for (int index = 0; index < n; index++){
            inputArray[index] = fin.read();
        }

        fin.close();

        System.out.println("Array read from file in " + (double)(System.nanoTime() - startTime)/1000/1000/1000 + " seconds.");

        //Delete file
        new File("booleans.bin").delete();

        //Check equality

        boolean equal = true;
        for (int index = 0; index < n; index++){
            if (outputArray[index] != inputArray[index]){
                equal = false;
                break;
            }
        }

        System.out.println("Input " + (equal ? "equals " : "doesn't equal ") + "output.");
    }

}
0
задан David Rojo 17 January 2019 в 17:54
поделиться

2 ответа

Просто проверьте ваш composer.json. Я только что сделал то же самое, и только воспитывал несовершеннолетнего. Затем я запустил обновление композитора, и мне это удалось.

Я всегда следую инструкциям.

https://symfony.com/doc/current/setup/upgrade_minor.html https://github.com/symfony/symfony/blob/4.2/UPGRADE- 4.2.md

0
ответ дан msphn 17 January 2019 в 17:54
поделиться

В моем случае я обновлялся до 4.2 с 4.1.11 и некоторые новые файлы с 4.2 по какой-то причине не создавались автоматически. Кроме того, есть несколько изменений в файлах среды, которые я считаю очень важными.

Я думаю, что лучший и самый чистый способ сделать это - сделать следующее:

Инструкции

  1. Обновление composer.json
"extra": {
    "symfony": {
        "allow-contrib": false,
        "require": "4.2.*"
    }
}
  1. Обновление зависимостей composer update "symfony/*"
  2. Создайте новый файл config/bootstrap.php с этим кодом .
  3. Обновите файл public/index.php с помощью этого кода .
  4. Обновить .gitignore

Удалить

###> symfony/framework-bundle ###
/.env

Добавить

###> symfony/framework-bundle ###
/.env.local
/.env.local.php
/.env.*.local
  1. ] Переименовать .env в .env.local
  2. Переименовать .env.dist в .env

Тестирование с помощью PHPUnit

Выполните следующие дополнительные шаги, если вы используете PHPUnit в своем приложении ( Рекомендуется ):

  1. Создайте новый .env.test и установите переменные для тестовой среды. . [тысяча сто двадцать восемь]
  2. Обновить phpunit.xml.dist с помощью этого кода .

Важно

Вы должны уведомить об изменениях файлов среды в вашей команде, и они должны сделать резервную копию своей текущей конфигурации, прежде чем извлекать изменения, потому что это будет переопределить файл .env.

Если вам нужна дополнительная информация об этом решении, прочитайте: https://symfony.com/doc/current/configuration/dot-env-changes.html

0
ответ дан Williams A. 17 January 2019 в 17:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: